在此示例中,冒号“运算符”在做什么?

时间:2018-08-19 21:17:10

标签: ruby

我在其他地方的答案中看到了这个示例,下面的示例输出foobar

a = :foo

def bar(b)
  :"#{b}bar"
end

c = bar(a)

c       

1 个答案:

答案 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