2014-01-11 17 views
36

は私に(オペレーター非オペレータ、および修飾の)決定的な、ピアレビュー/維持Rubyの優先順位表を表示します。Rubyの演算子の優先順位表

私はこの情報については、次のソースに頼らなければならなかった長年にわたり

1.http://phrogz.net/programmingruby/language.html#table_18.4 - つるはしブック、ルビー1.6文書化し、2000年9月にリリースされた、と含み書式設定のエラーまたはタイプミス({アサイン演算子としてリストされています)。

2.http://www.techotopia.com/index.php/Ruby_Operator_Precedenceは - 近く誤っ{含む上記つるはしテーブルのコピーや、誤っ||論理として 'AND'を説明しています。

3.http://www.tutorialspoint.com/ruby/ruby_operators.htmからつるはしテーブルのも近いコピー、それは||に論理「OR」の記述を修正し、まだそれはまだ代入演算子として{を示していますけれども。同様に、::と記載されており、それは定数解決演算子::ではなく、演算子です)と誤って記述しています。

4.http://my.safaribooksonline.com/book/web-development/ruby/9780596516178/expressions-and-operators/operatorsからそれぞれ2003年8月と2007年12月にリリースされたRubyの1.81.9を文書Rubyプログラミング言語ブック、、。この本はDavid FlanaganとMatsumoto Yukihiro(Rubyの発明者、Matz)によって2008年に出版されました。これは、オペレーター、非オペレーター、修飾子、およびサポート情報の最新かつ正確なリストであるようです。ルビー1.9にも書類の演算子を、そのテーブル内の非演算子と修飾子を含んで - ちなみに、2005年の周りに、ルビーの関心は

5.http://romhack.wikia.com/wiki/Ruby_operators 2004年7月にリリースされたレールと並行して急増しました。

Ruby 2.0 was released in February 2013, and was intended to be fully backward compatible with Ruby 1.9.3。いくつかの既知の非互換性のうち、演算子に関連するものはありません。

Ruby 2.1.0 was released on Christmas Day in 2013と同様に、演算子の非互換性はリストされていません。

このように、私はFlanagan/Matzの本をもとに答えを入れ、コミュニティwikiにしました。

+5

http://ruby-doc.org/core/doc/syntax/precedence_rdoc.html – Stefan

+0

ニース!ありがとうございました。私は下の答えを削除しようとしていたが、正式な表をよく見ることにした。間違いがあります( '?:'を '?、:'と表示します)。しかしそれに加えて、(それは初心者にそれほど役に立たない)説明がありません。私は以下の答えを削除する必要がありますか? – user664833

答えて

51

ルビー2.1.0、2.0、1.9、1.8

オペレータは、一個の以上のオペランドに対して実行される(例えば、加算または比較など)の動作を表すトークンです。オペランドは式であり、オペレータはこれらのオペランド式をより大きな式に組み合わせることができます。(Ref

N = アリティは=オペランドの数は、オペレータがオン動作します。 (Ref

= 連想評価の順序(同じ優先順位を持つ又はオペレータ)は、同じ演算子=式に順次表示されます。値Lは、式がの左から右へと評価されることを意味します。。値Rは、式がの右から左へと評価されることを意味します。。また、値Nは、演算子がであり、非関連付け式であり、評価順序を指定するために括弧なしの式で複数回使用できないことを意味します。 (Ref

M = 定義可能 = Rubyはクラスは、これらの演算子のための新たな意味を定義することを可能にする、方法としてのオペレータの数を実現します。列Mはどの演算子がメソッドであるかを指定します。 Yとマークされた演算子はメソッドで実装されており、再定義することができ、Nとマークされた演算子はそうでない場合があります。 (Ref

下表は、優先順位の降順(の最上位では、)です。

N A M Operator(s)   Description 
- - - -----------   ----------- 
1 R Y ! ~ +     boolean NOT, bitwise complement, unary plus 
           (unary plus may be redefined from Ruby 1.9 with [email protected]) 

2 R Y **      exponentiation 
1 R Y -      unary minus (redefine with [email protected]) 

2 L Y */%     multiplication, division, modulo (remainder) 
2 L Y + -     addition (or concatenation), subtraction 

2 L Y << >>     bitwise shift-left (or append), bitwise shift-right 
2 L Y &      bitwise AND 

2 L Y |^     bitwise OR, bitwise XOR (exclusive OR) 
2 L Y < <= >= >    ordering 

2 N Y == === != =~ !~ <=> equality, pattern matching, comparison 
           (!= and !~ may not be redefined prior to Ruby 1.9) 

2 L N &&      boolean AND 
2 L N ||      boolean OR 

2 N N .. ...     range creation (inclusive and exclusive) 
           and boolean flip-flops 

3 R N ? :     ternary if-then-else (conditional) 
2 L N rescue     exception-handling modifier 

2 R N =      assignment 
2 R N **= *= /= %= += -=  assignment 
2 R N <<= >>=    assignment 
2 R N &&= &= ||= |= ^=  assignment 

1 N N defined?    test variable definition and type 
1 R N not     boolean NOT (low precedence) 
2 L N and or     boolean AND, boolean OR (low precedence) 
2 N N if unless while until conditional and loop modifiers 
+0

良い質問と回答!私はこれらが最高から最低への優先順位の順に並べられていると思いますか? – antinome

+0

また、 '[]'が不足しているか、または技術的に演算子ではありませんか? – antinome

+0

ありがとうございます。最高の優先順位が一番上にあるというメモを付け加えました。私は '[]'がこのテーブルに合っているかどうかは確信していませんが、もし誰かがそれを正当化できれば、それを追加することは歓迎します。 ['['] 'は数多くのものに使用できます。](http://stackoverflow.com/q/12565/664833)、その説明では文脈を言及する必要があります。 – user664833

関連する問題