Ruby运算符" +"行为因代码间距而异?

时间:2014-03-18 09:36:26

标签: ruby unary-operator

我遇到了一点奇怪(使用Ruby 1.9.1)。案例场景是:

class D
    ...
    def self.d6
        1+rand(6)
    end
    ...
end

v = D::d6+2    # fine and dandy
v = D::d6 +2   # in `d6': wrong number of arguments (1 for 0) (ArgumentError)
v = D::d6 + 2  # fine and dandy

为什么" + 2"在第二种情况下被视为"正面2"而不是"添加2"?

1 个答案:

答案 0 :(得分:2)

与ruby中的+相同的-被重载,以使语法看起来不错。

当没有空格时,Ruby解析器会将+识别为d6 Integer的结果上调用的方法。 +之前和之后的空格版本也是如此。

但是:在Ruby +中的运算符优先级中,因为一元运算符在+之前被定义为二元运算符(在其他语言中也是如此)。

因此,如果+之前有空格但后面没有空格,则Ruby Parser会将其识别为符合错误消息的d6(+2)