【发布时间】:2010-09-10 17:00:04
【问题描述】:
在 Ruby 中,与许多其他 OO 编程语言一样,运算符是可重载的。但是,只能重载某些字符运算符。
此列表可能不完整,但以下是一些不能重载的运算符:
!, not, &&, and, ||, or
【问题讨论】:
标签: ruby methods operators operator-overloading
在 Ruby 中,与许多其他 OO 编程语言一样,运算符是可重载的。但是,只能重载某些字符运算符。
此列表可能不完整,但以下是一些不能重载的运算符:
!, not, &&, and, ||, or
【问题讨论】:
标签: ruby methods operators operator-overloading
在 Ruby 1.9 中,! 运算符实际上也是一个方法,可以被覆盖。这只剩下 && 和 || 以及它们的低优先级对应物 and 和 or。
还有一些其他“组合运算符”不能被覆盖,例如a != b 实际上是!(a == b) 而a += b 实际上是a = a+b。
【讨论】:
+= 方法,因为正如我在回答中已经解释的那样,没有 += 运算符,因此不能有对应的方法。 ++ 不是有效标识符,所以需要使用反射来创建这样的方法:define_method(:'++') do |arg| puts "Hello from #{__callee__} with #{arg}" end; __send__(:'++', 42)。
我们不要忘记<<,例如:
string = "test"
string << "ing"
和调用一样:
string.<<("ing")
【讨论】:
是的。运算符不可重载。只有方法。
有些运营商不是真的。它们是方法的糖。所以5 + 5 真的是5.+(5),而foo[bar] = baz 真的是foo.[]=(bar, baz)。
【讨论】:
【讨论】:
a.&& { b },而不是将a && b 翻译成a.&&(b)。块 do 提供惰性求值。
方法是可重载的,它们是语言语法的一部分。
【讨论】:
! 可以被覆盖。