2010-07-26 6 views
24

Y a-t-il une liste de tous les opérateurs ruby ​​qui peuvent être remplacés? (Pas ceux qui ne peuvent pas!)liste des opérateurs ruby ​​qui peuvent être remplacés/implémentés

+0

** La surcharge ** est l'utilisation du même nom de méthode pour différentes actions, où la méthode ne peut être distinguée que par sa signature. En fait, ce n'est pas possible dans Ruby. Surpasser ou redéfinir est le terme approprié ici. –

+0

Merci pour le détail, @platzhirsch. J'ai édité la question. Étrange comment on appelle généralement la surcharge de l'opérateur alors, non? – aaaidan

+0

Bien, comme moi, peut toujours être difficile en ce qui concerne l'utilisation des termes et leur signification :-) Après tout, il est dérivé de langages comme C++ où il fait peut-être la même chose, mais est basé sur des sémantiques différentes. –

Répondre

31

Voici a table of the Ruby operators.

Ceux qui sont des méthodes et surchargeable sont:

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

La table était du livre Pioche 2001, mais c'est la même table que dans le livre Pioche Ruby 1.9 - aucune raison de croire que cet ensemble des opérateurs infixes changera jamais.

+0

Par "ceux qui sont des méthodes et surchargeables", je suppose que vous voulez dire que l'on ne peut que surcharger les opérateurs qui sont des méthodes, non? Bien que les opérateurs "purs" ne puissent pas être surchargés, on peut abuser des mots-clés les plus proches (par exemple 'defined?', 'Not',' ou', 'begin') comme noms pour de nouvelles méthodes sans aucune infixité. – fny

+1

En fait,! = Et! ~ Peuvent être surchargés/définis, même si l'ancienne pioche dit que vous ne pouvez pas. En 2008, il y avait une plainte à ce sujet sur la liste de diffusion et Matz a commenté que Ruby était flexible. –

Questions connexes