为什么Ruby只允许某些操作符重载

为什么Ruby只允许某些操作符重载,ruby,methods,operators,operator-overloading,Ruby,Methods,Operators,Operator Overloading,在Ruby中,与许多其他OO编程语言一样,运算符是可重载的。但是,只能重载某些字符运算符 此列表可能不完整,但以下是一些不能重载的运算符: !, not, &&, and, ||, or 方法是可重载的,它们是语言语法的一部分。 --吉姆·魏里奇是的。运算符不能重载。只有方法 有些运营商并非如此。他们是糖的方法。所以5+5实际上是5.+(5),而foo[bar]=baz实际上是foo.[]=(bar,baz),我们不要忘记Ruby 1.9中的运算符实际上也是一种方法,可以重写。

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

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

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

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


--吉姆·魏里奇是的。运算符不能重载。只有方法


有些运营商并非如此。他们是糖的方法。所以
5+5
实际上是
5.+(5)
,而
foo[bar]=baz
实际上是
foo.[]=(bar,baz)
,我们不要忘记Ruby 1.9中的
运算符实际上也是一种方法,可以重写。这只剩下
&
|
以及它们的低优先级对应项


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

,正如约格在他的回答中提到的,
可以被重写。如何重写“+=”方法?我怎样才能添加“++”方法呢?事实上,这不是问题。你可以把它翻译成
a.&&b}
,而不是把
a.&&b
翻译成
a.&&b}
。块确实提供了延迟求值。如何覆盖“+=”方法?我怎样才能添加“++”方法呢?你不能重写
+=
方法,因为正如我在回答中已经解释的那样,没有
+=
操作符,因此不可能有相应的方法
++
不是有效的标识符,因此需要使用反射来创建这样的方法:
define_method(:'++')do | arg | puts“Hello from#{(被调用方)}和#{arg}”end__发送(:'++',42)
string = "test"
string << "ing"
string.<<("ing")