为什么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")