我遇到了一些奇怪的情况(我使用的是 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加法”?
最佳答案
与 ruby 中的 -
相同的 +
被重载,以使语法看起来更好。
当没有空格时,Ruby 解析器会将 +
识别为在 d6
结果上调用的方法,该结果是一个 Integer
。
对于 +
前后有空格的版本也是如此。
但是:在 Ruby 的运算符优先级中,作为一元运算符的 +
定义在作为二元运算符的 +
之前(其他语言中也经常出现这种情况) .
因此,如果 +
之前有空格但后面没有空格,Ruby 解析器会将其识别为 d6(+2)
,这符合错误消息。
关于Ruby 运算符 "+"行为因代码中的间距而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475286/