Tableau de priorité de l’opérateur Ruby

Montrez-moi un tableau de priorité Ruby définitif, évalué par les pairs / géré (des opérateurs , des non-opérateurs et des modificateurs ).

Au fil des années, j’ai dû compter sur les sources suivantes pour obtenir ces informations:

1. http://phrogz.net/programmingruby/language.html#table_18.4 – Le livre de Pickaxe , qui documente Ruby 1.6 , qui a été publié en septembre 2000, et contient une erreur de formatage ou une faute de frappe ( { est répertorié comme une affectation opérateur).

2. http://www.techotopia.com/index.php/Ruby_Operator_Precedence – Une copie proche de la table Pickaxe ci-dessus, y compris l’erreur { , et décrit accidentellement || comme logique ‘ET’ .

3. http://www.tutorialspoint.com/ruby/ruby_operators.htm – Egalement une copie proche de la table de pioche , bien qu’elle corrige la description de || à la logique «OU» , mais il répertorie toujours { comme un opérateur d’ affectation . De même, il liste :: et le décrit incorrectement comme un opérateur de résolution constante ( :: n’est pas un opérateur).

4. http://my.safaribooksonline.com/book/web-development/ruby/9780596516178/expressions-and-operators/operators – Le livre Ruby Programming Language , qui documente les rbuy 1.8 et 1.9 publiés en août 2003 et Décembre 2007, respectivement. Ce livre a été publié en 2008 par David Flanagan et Yukihiro Matsumoto (alias “Matz”, l’inventeur de Ruby). Cela semble être la liste la plus à jour et la plus précise des opérateurs, des non-opérateurs, des modificateurs et des informations à l’appui. Par ailleurs, vers 2005, l’intérêt pour Ruby a augmenté en parallèle avec Rails, sorti en juillet 2004.

5. http://romhack.wikia.com/wiki/Ruby_operators – Documente également les opérateurs dans Ruby 1.9 et inclut des non-opérateurs et des modificateurs dans sa table.

Ruby 2.0 été lancé en février 2013 et devait être entièrement compatible avec Ruby 1.9.3 . Parmi les rares incompatibilités connues, aucune n’est liée aux opérateurs.

Ruby 2.1.0 été publié le jour de Noël 2013 et, de même, aucune incompatibilité d’opérateur n’est répertoriée.

J’ai donc décidé d’inclure une réponse basée sur le livre Flanagan / Matz et en a fait un wiki communautaire .

Ruby 2.1.0, 2.0, 1.9, 1.8

Un opérateur est un jeton qui représente une opération (telle que l’ajout ou la comparaison) à effectuer sur un ou plusieurs opérandes. Les opérandes sont des expressions et les opérateurs nous permettent de combiner ces expressions d’opérandes dans des expressions plus grandes. ( Réf )

N = arity = Le nombre d’opérandes sur lesquelles l’opérateur opère. ( Réf )

A = associativité = Ordre d’évaluation lorsque le même opérateur (ou les opérateurs ayant la même priorité) apparaissent séquentiellement dans une expression. La valeur L signifie que les expressions sont évaluées de gauche à droite . La valeur R signifie que les expressions sont évaluées de droite à gauche . Et la valeur N signifie que l’opérateur est non associatif et ne peut pas être utilisé plusieurs fois dans une expression sans parenthèses pour spécifier l’ordre d’évaluation. ( Réf )

M = definability = Ruby implémente un certain nombre de ses opérateurs en tant que méthodes, permettant aux classes de définir de nouvelles significations pour ces opérateurs. La colonne M indique quels opérateurs sont des méthodes. Les opérateurs marqués d’un Y sont implémentés avec des méthodes et peuvent être redéfinis, et les opérateurs marqués d’un N peuvent ne pas l’être. ( Réf )

Le tableau suivant est classé selon la priorité décroissante ( priorité la plus élevée en haut ).

 NAM Operator(s) Description - - - ----------- ----------- 1 RY ! ~ + boolean NOT, bitwise complement, unary plus (unary plus may be redefined from Ruby 1.9 with +@) 2 RY ** exponentiation 1 RY - unary minus (redefine with -@) 2 LY * / % multiplication, division, modulo (remainder) 2 LY + - addition (or concatenation), subtraction 2 LY << >> bitwise shift-left (or append), bitwise shift-right 2 LY & bitwise AND 2 LY | ^ bitwise OR, bitwise XOR (exclusive OR) 2 LY < <= >= > ordering 2 NY == === != =~ !~ <=> equality, pattern matching, comparison (!= and !~ may not be redefined prior to Ruby 1.9) 2 LN && boolean AND 2 LN || boolean OR 2 NN .. ... range creation (inclusive and exclusive) and boolean flip-flops 3 RN ? : ternary if-then-else (conditional) 2 LN rescue exception-handling modifier 2 RN = assignment 2 RN **= *= /= %= += -= assignment 2 RN <<= >>= assignment 2 RN &&= &= ||= |= ^= assignment 1 NN defined? test variable definition and type 1 RN not boolean NOT (low precedence) 2 LN and or boolean AND, boolean OR (low precedence) 2 NN if unless while until conditional and loop modifiers 

Priorité des opérateurs RE Ruby

Une liste utile se trouve également au bas de cette page:

https://www.tutorialspoint.com/ruby/ruby_operators.htm

RE: Utiliser {}

Les variables locales commencent par une lettre minuscule ou _. La scope d’une variable locale varie de classe, module, def ou do à la fin correspondante ou de l’accolade d’ouverture d’un bloc à son accolade {}.

Lorsqu’une variable locale non initialisée est référencée, elle est interprétée comme un appel à une méthode sans arguments.

L’affectation à des variables locales non initialisées sert également de déclaration de variable. Les variables commencent à exister jusqu’à la fin de l’étendue actuelle. La durée de vie des variables locales est déterminée lorsque Ruby parsing le programme.

Dans l’exemple ci-dessus, les variables locales sont id, name et addr.

AUSSI: Vous pouvez remplacer la valeur de toute expression Ruby par une chaîne en utilisant la séquence # {expr}. Ici, expr pourrait être n’importe quelle expression de rbuy.

Source: https://www.tutorialspoint.com/ruby/ruby_variables.htm