我错过了什么或者这是红宝石中的错误吗?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
答案 0 :(得分:10)
a.include? "foo" && a.size == 3
评估为
a.include? ("foo" && a.size == 3)
因为
"foo" && a.size == 3 #=> true
这相当于
a.include? true
是false
答案 1 :(得分:4)
true && true == false
?
没有
irb(main):003:0> true && true == false
=> false
答案 2 :(得分:3)
您打算检查的是
a.include?("foo") && a.size == 3
您的条件是检查"foo" && a.size == 3
(true
,因为"foo"
既不是nil
也不是false
)是否包含在数组中。
Zack评论的解决方案也是正确的,但看起来有点不寻常:
(a.include? "foo") && a.size == 3
在缺少括号的情况下将整个表达式视为方法的参数的一个原因是你可以这样做:
puts 3 + 4 * 5 - 6