ruby中的字符串替换取决于变量的第一个字符

时间:2014-05-09 22:16:40

标签: ruby string-interpolation sigils

在我认为变量范围是我得到提示的原因之后,该替换取决于变量的第一个字符是否是字母/下划线。但我不明白这个意图。让我们举个例子:

$var1 = "bar"
_var2 = "bar"
var3 = "bar"
Var4 = "bar"
@var5 = "bar"
puts "foo #$var1"
puts "foo #_var2"
puts "foo #var3"
puts "foo #Var4"
puts "foo #@var5"

结果如下:

foo bar
foo #_var2
foo #var3
foo #Var4
foo bar

我希望所有5条线都一样。这是一个错误吗?或者这种行为的意图是什么?

1 个答案:

答案 0 :(得分:3)

不是关于范围。这里的问题是在插值中是否可以省略{}之后的#。如果您放置{},那么上面的任何一个都可以使用。当您有一个以非字母字符开头的变量(字母或下划线以外的字符,即$@)时,您可以省略{}。如果在不能的情况下省略{},则不会进行插值。