2010-07-26 11 views
24

Czy istnieje lista wszystkich operatorów rubinów, którzy mogą zostać przesłonięci? (Nie te, które nie mogą!)lista operatorów ruby, które można przesłonić/zaimplementować

+0

** Przeciążenie ** to użycie tej samej nazwy metody dla różnych działań, w których metoda wyróżnia się jedynie podpisem. W rzeczywistości nie jest to możliwe w Ruby. Zastąpienie lub przedefiniowanie to tutaj właściwy termin. –

+0

Dzięki za szczegóły, @platzhirsch. Zmieniłem to pytanie. Dziwne, jak to się zwykle nazywa przeciążenie operatora, nie? – aaaidan

+0

Cóż, jeden, jak ja, zawsze może być wybredny pod względem używania terminów i ich znaczenia :-) W końcu wywodzi się z języków takich jak C++, gdzie może to robi to samo, ale opiera się na innej semantyki. –

Odpowiedz

31

Oto a table of the Ruby operators.

Te, które są metody i przeciążania są:

[ ] [ ]= 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) 

Stół był z kilofem książki 2001, ale to ta sama tabela jak w książce Ruby 1.9 kilof - nie ma powodów, by sądzić, że ten zestaw operatorów infiksów kiedykolwiek się zmieni.

+0

Przez "te, które są metodami przeciążonymi" zakładam, że można przeciążać operatorów, którzy są metodami, nie? Ponadto, podczas gdy "czysty" operator nie może być przeciążony, można nadużyć bardziej słów kluczowych słów (np. "Zdefiniowane?", "Nie", "lub", "zacząć") jako nazwy dla nowych metod, bez jakiejkolwiek infiksowej dobroci. – fny

+1

W rzeczywistości! = I! ~ Może być przeciążone/zdefiniowane, nawet jeśli stary kilof mówi, że nie możesz. W 2008 roku pojawiła się skarga na ten temat na liście mailingowej, a Matz skomentował, że Ruby był elastyczny. –

Powiązane problemy