奇怪的语法错误“意外的一元+”与“+”之后的空格有关

时间:2015-06-22 07:16:45

标签: ruby

鉴于a未定义,以下内容看起来很好:

a + b + blah
# => NameError: undefined local variable or method `a' for main:Object

删除空间似乎很重要:

a + b +blah
# => syntax error, unexpected unary+, expecting keyword_do or '{' or '('

这是什么意思,为什么只是删除一个空格就会发生这种情况?这里+没有正常处理吗?如果我定义ab,则会变为:

a, b = 1, 1
a + b +blah
# => NameError: undefined local variable or method `blah' for main:Object

再次看起来+被正确对待。

1 个答案:

答案 0 :(得分:8)

一元+@运算符本身就是一个有效运算符(接受一个操作数并返回其值 - 例如。+4返回4)。不要与对两个操作数有效的加法运算符+混淆。

此外,它优先于普通的+加法运算符。

因此,+ca + b +c中的a + b +c被解析为a + b c的等价物,这是无效的,因为Ruby无法确定+c是否() 1}}是普通方法参数{}或块bind