我错过了什么还是这是红宝石中的错误?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
我错过了什么还是这是红宝石中的错误?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
a.include? "foo" && a.size == 3
被评估为
a.include? ("foo" && a.size == 3)
因为
"foo" && a.size == 3 #=> true
这相当于
a.include? true
这是false
是
true && true == false
吗?
不。
irb(main):003:0> true && true == false
=> false
你要检查的是
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