我遇到了一个奇怪的问题(正在使用Ruby1.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”?

最佳答案

与ruby中的+相同的-被重载,以便使语法看起来很好。
当没有空格时,ruby解析器将+识别为对d6的结果调用的方法。
Integer之前和之后带有空格的版本也是如此。
然而:在ruby中,一元运算符的优先顺序是在二元运算符之前定义的(在其他语言中也是如此)。
因此,如果+前面有一个空格,而不是后面有一个空格,ruby解析器会将其识别为+,这符合错误消息。

10-08 04:36