94

在 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 中都成功地尝试过。

为什么这行得通?口译员在这里做什么?

4

1 回答 1

110

根据Flanagan 和 Matsumoto的 The Ruby Programming Language

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

所以以下应该都可以工作:

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

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

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"
于 2012-04-10T15:35:45.870 回答