【发布时间】:2018-11-23 03:58:21
【问题描述】:
考虑以下 Ruby 代码:
[1,3].any? &:even? || true
# => false
[1,3].any? &nil || :even?
# => false
[1,3].any? &nil || :odd?
# => true
因此,Boolean-or || 似乎比 to-proc 一元 & 具有更高的优先级。我没想到会这样。是这样吗?它是否记录在任何地方?
【问题讨论】:
-
是的,我知道解决方案只是在第一个示例中将括号粘贴在
&:even周围。 -
一个更清晰的例子:
def s;end; s &false || nil。返回nil,但我预计会出现 TypeError -
因为
&基本上使参数表现得像一个块,它似乎与the lowest between all other operators 的块具有相同的优先级。 -
||运算符非常非常具有侵略性。 -
@potashin 如果这是真的,那么
[1,3].any? &:even? or true将返回false因为or的优先级高于块,所以[1,3].any? &(:even? or true) #=> false但一元&的优先级高于or和对any?的方法调用也是如此,因此评估是[1,3].any?(&(:even?)) or true #=> true