Я что-то упустил или это ошибка в рубине?Действительно ли true && true == false?
a = %w(foo bar baz)
a.include? "foo" # => true
a.size == 3 # => true
a.include? "foo" && a.size == 3 # => false
Я что-то упустил или это ошибка в рубине?Действительно ли true && 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
оценивается как
a.include? ("foo" && a.size == 3)
и потому
"foo" && a.size == 3 #=> true
это эквивалентно
a.include? true
которая false
Что вы имели в виду, чтобы проверить, является
a.include?("foo") && a.size == 3
Ваше условие проверки, если "foo" && a.size == 3
(который true
потому "foo"
ни nil
, ни false
) входит в массив.
Решение комментарий Зака правильно тоже, но выглядит немного необычное:
(a.include? "foo") && a.size == 3
Одна из причин, почему все выражение считается аргумент метода, в случае отсутствия скобок вы можете сделать:
puts 3 + 4 * 5 - 6
Я написал это так, потому что, как я уже сказал, я не знаю Ruby, и я не знал, разрешено ли 'a.include? (" Foo ")'. – zwol
ли
true && true == false
?
No.
irb(main):003:0> true && true == false
=> false
Я не знаю, рубин, но старшинство Провал может быть? Попробуйте '(a.include?" Foo ") && a.size == 3', и если он все еще не прав,' (a.include? "Foo") && (a.size == 3) '. – zwol
Это не ошибка; Гибкий синтаксис Ruby также означает, что он соответствует другому набору правил, чем при определении содержимого списка параметров метода. Как это волшебным образом догадаться, что вы имели в виду? Понятие о том, что это ошибка в логических условиях Ruby, будет касаться последней вещи, которую я бы предположил. –
[Операторы Ruby (с высоким до низкого приоритета)] (http://phrogz.net/ProgrammingRuby/language.html#table_18.4) – devnull