8

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

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

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

5 回答 5

25

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

——吉姆·韦里奇

于 2008-09-18T14:16:01.570 回答
12

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

于 2008-09-18T14:14:12.353 回答
12

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

有些运营商不是真的。它们是方法的糖。5 + 5确实如此5.+(5),而且foo[bar] = baz确实如此foo.[]=(bar, baz)

于 2008-09-18T14:16:58.383 回答
6

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

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

于 2008-09-20T20:53:26.860 回答
1

我们不要忘记<<例如:

string = "test"
string << "ing"

与调用相同:

string.<<("ing")
于 2008-09-19T00:11:42.683 回答