为什么Ruby只允许某些运算符重载

在Ruby中,与许多其他OO编程语言一样,运算符是可重载的。 但是,只有某些字符运算符可以重载。

此列表可能不完整,但是,以下是一些无法重载的运算符:

!, not, &&, and, ||, or 

方法是可重载的,这些是语言语法的一部分。

“&&和||运算符不可重载,主要是因为它们提供的”短路“评估无法通过纯方法调用再现。”

– Jim Weirich

是的。 操作员不会过载。 只有方法。

有些运营商并非如此。 他们是方法的糖。 所以5 + 5真的是5.+(5) ,而foo[bar] = baz真的是foo.[]=(bar, baz)

在Ruby 1.9中, ! operator实际上也是一种方法,可以覆盖。 这只留下&&|| 和他们的低优先级对应物和or

还有一些其他“组合运算符”无法被覆盖,例如a != b实际上是!(a == b)a += b实际上是a = a+b

我们不要忘记<<例如:

 string = "test" string << "ing" 

与调用相同:

 string.<<("ing")