为什么在没有大括号的情况下在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!"