字符串“#$”和“#@”的语法错误

时间:2011-08-31 16:53:55

标签: ruby

有人可以向我解释这种行为吗?

>> "#$"
SyntaxError: (irb):3: unterminated string meets end of file
    from /Users/milan/.rvm/rubies/ruby-1.9.2-head/bin/irb:16:in `<main>'

>> "#@"
SyntaxError: (irb):4: syntax error, unexpected $undefined
(irb):4: unterminated string meets end of file
    from /Users/milan/.rvm/rubies/ruby-1.9.2-head/bin/irb:16:in `<main>'

>> "#$$"
"10994"

我是否错过了1.9.2的一些新功能?困惑。

1 个答案:

答案 0 :(得分:11)

您可能知道可以在双引号值内使用#{ expression }expression的值插入该位置的字符串中。一个鲜为人知的子特征是,如果表达式只是全局变量或实例变量,则可以省略大括号。即双引号字符串中的#$foo将插入全局变量$foo的值,而#@foo将对实例变量执行相同的操作。

所以你的前两个例子出错了,因为它认为你想分别得到变量$"@"(后者不是变量名 - 虽然第一个是 - 这就是为什么你得到第二个错误消息而第一个只有一个错误消息,让字符串保持未闭合状态。第三个例子只是给你变量$$的值。

如果您不希望这种情况发生,您可以使用前面的反斜杠转义#(如果您不需要任何双引号,则只需使用单引号而不是双引号行为)。

这种行为并非特定于ruby 1.9 - 它一直都是这样的。