我遇到了一个奇怪的问题(正在使用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解析器会将其识别为+
,这符合错误消息。