创建符号
创建 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]