3

何か不足していますか、それとも Ruby のバグですか?

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(これはis not orであるtrueためです)。"foo"nilfalse

ザックのコメントの解決策も正しいですが、少し変わったように見えます:

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

括弧が欠落している場合に式全体がメソッドの引数と見なされる理由の 1 つは、次のようにできることです。

puts 3 + 4 * 5 - 6
于 2013-06-14T13:42:14.203 に答える