为什么在没有大括号的情况下在Ruby中使用string插值?
在Ruby中使用string插值的正确方法如下:
name = "Ned Stark" puts "Hello there, #{name}" #=> "Hello there, Ned Stark"
这是我打算总是使用它的方式。
不过,我注意到Ruby的string插值有些奇怪 。 我已经注意到,string插值在Ruby中没有花括号来表示实例variables。 例如:
@name = "Ned Stark" puts "Hello there, #@name" #=> "Hello there, Ned Stark"
而那个尝试与非实例variables相同的东西是行不通的。
name = "Ned Stark" puts "Hello, there, #name" #=> "Hello there, #name"
我在1.9.2和1.8.7都试过这个成功的例子。
为什么这个工作? 口译员在这里做什么?
根据Flanagan和Matsumoto 的Ruby编程语言 :
当要插入到string文本中的expression式只是对全局实例或类variables的引用时,可以省略花括号。
所以下面的所有工作:
@var = "Hi" puts "#@var there!" #=> "Hi there!" @@var = "Hi" puts "#@@var there!" #=> "Hi there!" $var = "Hi" puts "#$var there!" #=> "Hi there!"