2

我遇到了一些奇怪的事情(我使用的是 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”?

4

1 回答 1

3

与in ruby+​​ 相同-,为了使语法看起来不错,它们被重载。

当没有空格时,Ruby 解析器将 识别+为在其结果d6Integer. .前后有空格的版本也是如此+

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

因此,如果在 之前+但之后没有空格,Ruby Parser 将识别它d6(+2)与错误消息相符。

于 2014-03-18T09:48:35.067 回答