код не проверяет второе условие elsif в ruby - PullRequest
1 голос
/ 26 апреля 2019

Мой код возвращает 1-й оператор в потоке управления.

a = 6
b = 13
c = 4
if a == 2||4||5 && b == 9||10||11
puts "staement1"
elsif a == 6||7||8 && b == 12||13||14
puts "statement2"
elsif puts c
end

Выходные данные - "оператор1", но это должен быть "оператор2".в чем проблема?

Ответы [ 2 ]

4 голосов
/ 26 апреля 2019

Ваш if - как

a = 6
b = 13
if (a == 2)||4||5 && (b == 9)||10||11

, поэтому в итоге

4 && 10

и это true, потому что единственными значениями фальси в ruby ​​являются nil и falseсам

может быть, то, что вы хотите, это что-то вроде

if [2, 4, 5].include?(a) && [9, 10, 11].include?(b)
2 голосов
/ 26 апреля 2019

Давайте поговорим о a == 2 || 4 || 5.

Не эквивалентно a == 2 || a == 4 || a == 5, но оценивается в следующем порядке:

  1. a == 2 - это false
  2. false || 4 - это 4
  3. 4 || 5 не оценивается и закорачивается.

Следовательно, значение a == 2 || 4 || 5 равно 4 ...

То же правило применяется к b == 9||10||11 ... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...