我遇到了一点奇怪(使用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"?
答案 0 :(得分:2)
与ruby中的+
相同的-
被重载,以使语法看起来不错。
当没有空格时,Ruby解析器会将+
识别为d6
Integer
的结果上调用的方法。
+
之前和之后的空格版本也是如此。
但是:在Ruby +
中的运算符优先级中,因为一元运算符在+
之前被定义为二元运算符(在其他语言中也是如此)。
因此,如果+
之前有空格但后面没有空格,则Ruby Parser会将其识别为符合错误消息的d6(+2)
。