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



谁能给我解释一下这种行为?

>> "#$"
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的一些新功能?困惑。

您可能知道可以在双引号内使用#{ expression }来将expression的值插入到该位置的字符串中。一个鲜为人知的子特性是,如果表达式只是一个全局变量或实例变量,则可以省略大括号。例如,#$foo在双引号字符串内将插入全局变量$foo的值,#@foo将为实例变量做同样的事情。

所以你的前两个例子出错了,因为它认为你想分别获得变量$"@"(后者不是一个变量名-尽管第一个是-这就是为什么你得到第二个两个错误消息,第一个只有一个),留下字符串未关闭。第三个例子简单地给出了变量$$的值。

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

这个行为不是ruby 1.9特有的——它一直都是这样的

相关内容

  • 没有找到相关文章

最新更新