我在其他地方的答案中看到了这个示例,下面的示例输出foobar
:
a = :foo
def bar(b)
:"#{b}bar"
end
c = bar(a)
c
答案 0 :(得分:8)
冒号不是bar
中的运算符,它只是一个Symbol
文字,它使用字符串插值来构建Symbol
。需要引用某些Symbol
来避免语法问题,例如:
:'a+b'
您还可以在此语法中使用双引号,并且这些引号的行为就像字符串的双引号一样,因此它们支持字符串插值。所以这个:
:"#{b}bar"
等效于:
"#{b}bar".to_sym
或
(b.to_s + 'bar').to_sym
如果您#inspect
的价值,您将对其中的价值有更好的了解:
puts c.inspect
# :foobar