Symbol

用来表示符号的类。符号可以和任意字符串组成一对一的对应关系。在Ruby脚本中可以这样

来得到符号。在使用字面值来表示符号时,`:'后面只能是标识符、方法名(包括`!'、`?'等后缀)、变量名(包括`$'等前缀)或可重定义的操作符(除此之外将引发语法错误)。

ruby 1.7 特性:

p :"foo#{"bar"}"
  => :foobar
p :'foo#{"bar"}'
  => :"foo\#{\"bar\"}"
p %s{foo#{"bar"}}
  => :"foo\#{\"bar\"}"

超类:

类方法:

Symbol.all_symbols

ruby 1.7 特性

以数组的形式返回所有已定义的符号对象。

p Symbol.all_symbols  # => [:RUBY_PLATFORM, :RUBY_VERSION, ...]

由于在编译时才会生成符号,所以

a = Symbol.all_symbols
:foo
b = Symbol.all_symbols
p b - a
# => []

方法:

to_sym

ruby 1.7 特性: 返回self

id2name()
to_s

返回某符号所对应的字符串。

如果想得到与某字符串相对应的符号时,请使用String#intern

p :foo.id2name.intern == :foo
=> true
to_i

返回某符号所对应的整数。

相反地,若想从该整数中获取所对应的符号时,要先使用Fixnum#id2name得到字符串才行。(ruby 1.7 特性: 可使用Fixnum#to_sym来直接获取符号)

id = :foo.to_i
p id                  # => 8881
p id.id2name.intern   # => :foo
p id.to_sym           # => :foo  (version 1.7)

Ruby使用该整数来管理保留字、变量名以及方法名等。对象所对应的整数(可从Object#id中得到)和Symbol所对应的整数根本就是两码事儿。