“include?foo&& true”会产生意外(错误)结果

时间:2015-05-11 02:49:55

标签: ruby syntax

考虑:

foo = :bar

[:a, :b, :c, :bar].include? foo
=> true

然而,

[:a, :b, :c, :bar].include? foo && true
=> false

([:a, :b, :c, :bar].include? foo) && true
=> true

为什么第一种格式不起作用? Ruby首先评估foo && true吗?

2 个答案:

答案 0 :(得分:2)

(--depth = 1)具有高优先级。基本上该陈述变为

&&

您可以尝试优先级较低的[:a, :b, :c, :bar].include? (foo && true) 运算符:

and

相同
[:a, :b, :c, :bar].include? foo and true

答案 1 :(得分:0)

感谢@MartinKonecny,我还注意到我正在使用include?方法而没有括号,这会造成歧义。更好的方法是:

[:a, :b, :c, :bar].include?(foo) && true
=> true