创建符号

创建 Symbol 对象的最常用方法是在字符串标识符前面添加冒号:

:a_symbol       # => :a_symbol
:a_symbol.class # => Symbol

以下是一些定义 Symbol 的替代方法,结合 String 文字:

:"a_symbol"
"a_symbol".to_sym

符号还有一个%s 序列,支持任意分隔符,类似于%q%Q 对字符串的工作方式:

%s(a_symbol)
%s{a_symbol}

%s 对于从包含空格的输入创建符号特别有用:

%s{a symbol} # => :"a symbol"

虽然可以使用某些字符串标识符创建一些有趣的符号(:/:[]:^等),但请注意,无法使用数字标识符创建符号:

:1 # => syntax error, unexpected tINTEGER, ...
:0.3 # => syntax error, unexpected tFLOAT, ...

符号可以以单个 ?! 结尾,而无需使用字符串文字作为符号的标识符:

:hello?  # :"hello?" is not necessary.
:world!  # :"world!" is not necessary.

请注意,所有这些创建符号的不同方法都将返回相同的对象:

:symbol.object_id == "symbol".to_sym.object_id
:symbol.object_id == %s{symbol}.object_id

从 Ruby 2.0 开始,有一个从单词创建符号数组的快捷方式:

%i(numerator denominator) == [:numerator, :denominator]