向我展示一个权威的,经过同行评审/维护的Ruby优先级表(运算符,非运算符和修饰符).
多年来,我不得不依赖以下来源获取此信息:
1. http://phrogz.net/programmingruby/language.html#table_18.4 - 文档Ruby 的Pickaxe书,1.6于2000年9月发布,包含格式错误或拼写错误({列为赋值运算符) .
2. http://www.techotopia.com/index.php/Ruby_Operator_Precedence - 上述Pickaxe表的近似副本,包括错误的{,并且意外地描述||为逻辑"AND".
3. http://www.tutorialspoint.com/ruby/ruby_operators.htm - 也是Pickaxe表的近似副本,虽然它修复了||对Logical'OR'的描述,但它仍然{列为赋值运算符.同样,它列出::并错误地描述为一个恒定的分辨率操作者(::是不是操作者).
4. http://my.safaribooksonline.com/book/web-development/ruby/9780596516178/expressions-and-operators/operators - Ruby编程语言的书,其中记录的Ruby 1.8和1.9,这是在2003年发布2007年8月和十二月, 分别.本书由David Flanagan和Yukihiro Matsumoto(又名"Matz",Ruby的发明者)于2008年出版.它似乎是最新,最准确的运营商,非运营商,修改器和支持信息列表.顺便说一句,在2005年左右,对Ruby的兴趣与2004年7月发布的Rails同步增长.
5. http://romhack.wikia.com/wiki/Ruby_operators - 还记录Ruby中1.9的运算符,并在其表中包含非运算符和修饰符.
Ruby 2.0于2013年2月发布,旨在与Ruby完全向后兼容1.9.3.在少数已知的不兼容性中,没有一个与运营商有关.
Ruby 2.1.0在圣诞节当天发布2013,同样,没有列出运营商不兼容性.
因此,我决定根据Flanagan/Matz的书提供一个答案,并将其作为社区维基.
use*_*833 62
的操作者是一个表示操作(如加法或比较)要在一个或多个操作数执行的令牌.操作数是表达式,运算符允许我们将这些操作数表达式组合成更大的表达式.(参考)
N = arity =操作员操作的操作数的数量.(参考)
A = associativity =当同一个运算符(或具有相同优先级的运算符)在表达式中按顺序出现时的求值顺序.该值L表示从左到右计算表达式.该值R表示从右到左计算表达式.并且该值N意味着运算符是非关联的,并且在没有括号的表达式中不能多次使用以指定评估顺序.(参考)
M = definability = Ruby实现了许多运算符作为方法,允许类为这些运算符定义新的含义.列M指定哪些运算符是方法.标有a的运算符Y使用方法实现,可以重新定义,标记为a的运算符N可以不重新定义.(参考)
下表按降序优先级排序(顶部的最高优先级).
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 +@)
2 R Y ** exponentiation
1 R Y - unary minus (redefine with -@)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14085 次 |
| 最近记录: |