为什么在没有花括号的情况下,字符串插值在Ruby中工作?

时间:2012-04-10 14:58:47

标签: ruby string-interpolation

在Ruby中使用字符串插值的正确方法如下:

name = "Ned Stark"
puts "Hello there, #{name}" #=> "Hello there, Ned Stark"

这就是我打算一直使用它的方式。

然而,我在Ruby的字符串插值中发现了一些奇数。我注意到字符串插值在Ruby中没有关于实例变量的花括号。例如:

@name = "Ned Stark"
puts "Hello there, #@name" #=> "Hello there, Ned Stark"

尝试与非实例变量相同的东西不起作用。

name = "Ned Stark"
puts "Hello, there, #name" #=> "Hello there, #name"

我在1.9.2和1.8.7中都成功地尝试了这一点。

为什么这样做?口译员在这做什么?

1 个答案:

答案 0 :(得分:93)

根据Flanagan和Matsumoto的 Ruby Programming Language :

  

当要插入到字符串文字中的表达式只是对全局,实例或类变量的引用时,可以省略花括号。

所以以下都应该有效:

@var = "Hi"
puts "#@var there!"  #=> "Hi there!"

@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"