Ai-je raté quelque chose ou est-ce un bug dans ruby?Est-ce vrai && true == false?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
Ai-je raté quelque chose ou est-ce un bug dans ruby?Est-ce vrai && true == 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
est évaluée comme
a.include? ("foo" && a.size == 3)
et parce que
"foo" && a.size == 3 #=> true
cela équivaut à
a.include? true
qui est false
Qu'est-ce que vous vouliez dire à vérifier est
a.include?("foo") && a.size == 3
Votre état vérifie si "foo" && a.size == 3
(qui est true
parce "foo"
est ni nil
ni false
) est inclus dans le tableau.
La solution du commentaire de Zack est correct aussi, mais à la recherche d'un peu inhabituel:
(a.include? "foo") && a.size == 3
Une raison pour laquelle toute expression est considérée comme l'argument de la méthode dans le cas des parenthèses manquantes est que vous pouvez faire:
puts 3 + 4 * 5 - 6
Je l'ai écrit ainsi parce que, comme je l'ai dit, je ne connais pas Ruby, et je ne savais pas si 'a.include? (" Foo ")' était autorisé. – zwol
est-
true && true == false
?
n °
irb(main):003:0> true && true == false
=> false
Je ne sais pas ruby, mais botch de priorité peut-être? Essayez '(a.include?" Foo ") && a.size == 3', et si c'est encore faux,' (a.include? "Foo") && (a.size == 3) '. – zwol
Ce n'est pas un bug du tout; La syntaxe flexible de Ruby signifie également qu'il suit un ensemble de règles différent de celui que vous utilisez pour déterminer le contenu de la liste de paramètres d'une méthode. Comment devinerait-il par magie ce que tu voulais dire? La notion que c'est un bug dans les conditions logiques de Ruby serait à propos de la * dernière * chose que je suppose. –
[Opérateurs Ruby (priorité haute à basse)] (http://phrogz.net/ProgrammingRuby/language.html#table_18.4) – devnull