向我展示一个权威的,经过同行评审/维护的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.在少数已知的不兼容性中,没有一个与运营商有关.
当我做:
puts(nil or 4)
Run Code Online (Sandbox Code Playgroud)
Ruby抱怨:
SyntaxError: syntax error, unexpected keyword_or, expecting ')'
Run Code Online (Sandbox Code Playgroud)
这是为什么?puts(nil || 4)确实有效,但我想知道为什么or不这样做.我认为两者之间的区别只在于它们的运算符优先级.
(我知道这个表达nil or 4似乎没有用,因为它总是会返回4.这只是一个例子,为了简单起见.我的实际表达是Integer(ENV['WD'] or 4).)
http://phrogz.net/programmingruby/language.html#table_18.4 上面链接提供的表格只给出了 ruby 运算符的优先级。方法的优先级是什么(或者我应该说:消息/函数)?
例如,当我在 irb 中输入如下内容时
Math.sqrt 2 + 2
Run Code Online (Sandbox Code Playgroud)
结果我得到了 2.0。没有优先级的明确规则,我无法决定在哪里使用括号以及在哪里省略它们。所以,请有人帮助我摆脱这种不确定性。提前致谢!
我有一个快速的问题 :
在红宝石中,如果我写
def test
foo && a == b && c == "bar"
end
Run Code Online (Sandbox Code Playgroud)
如果 foo 为 null 或 false,它会继续评估表达式的其余部分吗?
如果我这样做,它会改变什么吗
def test
a == b && c == "bar" if foo
end
Run Code Online (Sandbox Code Playgroud)
多谢