"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
考虑:
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