3

我错过了什么还是这是红宝石中的错误?

a = %w(foo bar baz)
a.include? "foo"                # => true
a.size == 3                     # => true
a.include? "foo" && a.size == 3 # => false 
4

3 回答 3

10
a.include? "foo" && a.size == 3

被评估为

a.include? ("foo" && a.size == 3)

因为

"foo" && a.size == 3  #=> true

这相当于

a.include? true

这是false

于 2013-06-14T13:44:45.677 回答
4

true && true == false吗?

不。

irb(main):003:0> true && true == false
=> false
于 2013-06-14T13:47:52.577 回答
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
于 2013-06-14T13:42:14.203 回答