2010-07-26 36 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