用来表示符号的类。符号可以和任意字符串组成一对一的对应关系。在Ruby脚本中可以这样
:symbol'symbol'.intern来得到符号。在使用字面值来表示符号时,`:'后面只能是标识符、方法名(包括`!'、`?'等后缀)、变量名(包括`$'等前缀)或可重定义的操作符(除此之外将引发语法错误)。
ruby 1.7 特性:
p :"foo#{"bar"}"
=> :foobar
p :'foo#{"bar"}'
=> :"foo\#{\"bar\"}"
p %s{foo#{"bar"}}
=> :"foo\#{\"bar\"}"
Symbol.all_symbolsruby 1.7 特性
以数组的形式返回所有已定义的符号对象。
p Symbol.all_symbols # => [:RUBY_PLATFORM, :RUBY_VERSION, ...]
由于在编译时才会生成符号,所以
a = Symbol.all_symbols :foo b = Symbol.all_symbols p b - a # => []
to_symruby 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所对应的整数根本就是两码事儿。