为什么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中,!
运算符实际上也是一个方法,可以被覆盖。这只剩下&&
和||
以及它们的低优先级对应对象and
和or
。
还有其他一些不能被覆盖的"组合运算符",例如a!= b实际上是!(a == b)和a + = b实际上是a = a + b
。