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

Mil*_*ota 4 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"
Run Code Online (Sandbox Code Playgroud)

我错过了1.9.2的一些新功能吗?困惑.

sep*_*p2k 11

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

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

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

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

  • 如果你_want_字符串``#$'`或``#@"`你只需要逃避octothorpe:`"\#$"和`"## @"`. (2认同)