何か不足していますか、それとも Ruby のバグですか?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
何か不足していますか、それとも Ruby のバグですか?
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
(これはis not orであるtrue
ためです)。"foo"
nil
false
ザックのコメントの解決策も正しいですが、少し変わったように見えます:
(a.include? "foo") && a.size == 3
括弧が欠落している場合に式全体がメソッドの引数と見なされる理由の 1 つは、次のようにできることです。
puts 3 + 4 * 5 - 6