考虑:
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
吗?
答案 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