深入探索

什么是符号?

之前,我说过符号(symbol)是一个标识符,其值就是它本身。从广义上讲,这描述了从 Ruby 程序员的角度来待看符号的行为方式。但它并没有告诉我们从 Ruby 解释器(interpreter)的角度来看,符号的字面意思是什么。实际上,符号是指向符号表(symbol table)的指针(pointer)。符号表是 Ruby 的已知标识符的内部列表 - 例如变量和方法名称。

如果你想深入了解 Ruby,你可以显示 Ruby 已知的所有符号,如下所示:

allsymbols.rb
  1. p( Symbol.all_symbols )

这将显示数千个符号,包括方法名称,例如 :to_s:reverse,全局变量,例如:$/:$DEBUG,类名称,例如 :Array:Symbol。你可以使用数组索引限制显示的符号数量,如下所示:

  1. p( Symbol.all_symbols[0,10] )

但是你不能对符号进行排序,因为符号本身并不是连续的。显示符号排序列表的最简单方法是将它们转换为字符串并对其进行排序。在下面的代码中,我将 Ruby 已知的所有符号传递给一个块,该块将每个符号转换为一个字符串,并将字符串收集到一个新的数组中,该数组被分配给 str_array 变量。现在我可以对这个数组进行排序并显示结果:

  1. str_arr = Symbol.all_symbols.collect{ |s| s.to_s }
  2. puts( str_arr.sort )