2010-07-26 77 views
24

是否有可以覆盖的所有Ruby运算符的列表? (不是那些不能!)可以被覆盖/实现的Ruby运算符列表

+0

**重载**是对不同动作使用相同的方法名称,其中方法只能通过其签名来区分。其实这在Ruby中是不可能的。重写或重新定义在这里是适当的术语。 – 2013-09-30 20:01:14

+0

感谢您的详细信息,@platzhirsch。我编辑了这个问题。奇怪的是,它通常被称为运算符重载然后,不是? – aaaidan 2013-10-07 23:29:52

+0

好吧,和我一样,对于术语的使用和它们的含义总是可以挑剔的:-)毕竟它是从像C++这样的语言中派生出来的,它可能是相同的,但是基于不同的语义。 – 2013-10-08 00:47:01

回答

31

这是a table of the Ruby operators

是方法和那些重载的是:

[ ] [ ]= Element reference, element set 
** Exponentiation 
! ~ + -  Not, complement, unary plus and minus (method names for the last two are [email protected] and [email protected]) 
*/% Multiply, divide, and modulo 
+ -  Plus and minus 
>> << Right and left shift 
& Bitwise `and' 
^ |  Bitwise exclusive `or' and regular `or' 
<= < > >= Comparison operators 
<=> == === != =~ !~  Equality and pattern match operators (!= and !~ may not be defined as methods) 

该表是从2001年镐书,但是这是同一个表在Ruby 1.9镐书 - 没有理由相信这一套的中缀操作员将会改变。

+0

通过“那些方法和可重载的,”我假设你的意思是只能重载方法的操作符,不是?另外,尽管“纯”操作符不能被重载,但可以滥用更多类似字的关键字(例如'defined?','not','或''begin')作为新方法的名称而没有任何infixy的优点。 – fny 2012-06-03 04:14:17

+1

实际上,!=和!〜可以被重载/定义,即使旧镐说你不能。早在2008年,在邮件列表上就有人投诉,Matz评论说Ruby是灵活的。 – 2012-12-29 06:17:51