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

时间:2020-03-06 14:21:31  来源:igfitidea点击:

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

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

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

解决方案

方法是可重载的,它们是语言语法的一部分。

" &&和||运算符不可重载,主要是因为它们提供了"短路"评估,而纯方法调用无法复制该评估。"

吉姆·韦里奇(Jim Weirich)

是的。运算符不可重载。只有方法。

一些运营商并非如此。他们是方法的糖。因此," 5 + 5"实际上是" 5. +(5)",而" foo [bar] = baz"实际上是" foo。[] =(bar,baz)"。

而且,例如,我们不要忘记<<

string = "test"
string << "ing"

与调用相同:

string.<<("ing")

在Ruby 1.9中,运算符实际上也是一个方法,可以被覆盖。这只剩下&&||以及它们的低优先级对应对象andor

还有其他一些不能被覆盖的"组合运算符",例如a!= b实际上是!(a == b)和a + = b实际上是a = a + b