"include? foo && true" 产生意外(假)结果

"include? foo && true" produces unexpected (false) result

考虑:

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

&& 具有高优先级。基本上语句变成了

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

您可以尝试优先级较低的and运算符:

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

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

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

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