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

时间:2008-09-18 14:10:09

标签: ruby methods operators operator-overloading

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

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

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

5 个答案:

答案 0 :(得分:25)

答案 1 :(得分:12)

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

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

答案 2 :(得分:11)

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

答案 3 :(得分:6)

在Ruby 1.9中,!运算符实际上也是一种方法,可以被覆盖。这只留下&&||及其低优先级对应andor

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

答案 4 :(得分:1)

我们不要忘记<<例如:

string = "test"
string << "ing"

与调用相同:

string.<<("ing")