jsh*_*ort 7 ruby operator-precedence
这是两个测试:
if [1,2,3,4].include? 2 && nil.nil?
puts :hello
end
#=>
Run Code Online (Sandbox Code Playgroud)
和
if [1,2,3,4].include?(2) && nil.nil?
puts :hello
end
#=> hello
Run Code Online (Sandbox Code Playgroud)
上面告诉我,它&&具有比方法参数更高的优先级,所以它在逻辑上2 && nil.nil?是正确的,并将其作为参数传递给包含?.
但是,有这个测试:
if [1,2,3,4].include? 2 and nil.nil?
puts :hello
end
#=> hello
Run Code Online (Sandbox Code Playgroud)
所以这告诉我方法参数和' and'具有相同的优先级(或方法args高于' and'),因为它传递2包含?在它处理'和'之前.
注意:我理解&&并且and具有不同的优先级.问题不在于此,而是与ruby方法的参数相关and或相对or.
我找不到证实这一点的文件.例如,这根本没有提到方法参数:http://phrogz.net/programmingruby/language.html#table_18.4或http://romhack.wikia.com/wiki/Ruby_operators.
有谁能解释这种行为?也就是说,ruby如何知道将值作为参数传递给方法与流程操作符?
我从未见过任何有关方法参数优先级的文档,但在查看方法参数时我使用的一条经验法则是在心里尽可能地去除参数中的空格,并且仍然具有相同的表达式。这通常给我优先权:
[1,2,3,4].include? 2&&nil.nil?是相同的表达式,但不能去掉空格
[1,2,3,4].include? 2 and nil.nil?,因此优先级是从左到右...即方法参数是 2。
不管怎样,更好的问题是你到底为什么要写这样的声明?
省略方法括号仅对代码可读性有用。然而,你的语句很难读懂,并且会让人在代码上停顿一下,并比他应该思考的更多。如果我要这样审查代码,我肯定会因为可读性差而无法通过代码审查。
事实上,许多风格指南明确指出,大多数带有参数的方法都应该加括号(这甚至是一个单词吗?)。例如: Ruby 风格指南
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |