Важно подчеркнуть запятую ',' в условии когда действует как || оператора if, то есть он выполняет сравнение ИЛИ, а не сравнение И между выражениями с разделителями в предложении когда. Так что ознакомьтесь с приведенным ниже заявлением. Ясно, что x не меньше 2, но возвращаемое значение - «яблоко». Зачем? Поскольку x было 3 и, поскольку ',' действует как ||, он не потрудился оценить выражение 'x <2'. </p>
x = 3
case x
when 3, x < 2 then 'apple'
when 3, x > 2 then 'orange'
end
=> "apple"
Вы можете подумать, что для выполнения AND вы можете сделать что-то вроде этого ниже. Но это не работает. Это потому, что (3 && x> 2) оценивается как true, а ruby принимает значение True и сравнивает его с x с ===, что, очевидно, неверно, поскольку x равен 3.
case x
when (3 && x < 2) then 'apple'
when (3 && x > 2) then 'orange'
end
=> nil
Чтобы выполнить сравнение &&, вам нужно обработать регистр как, и если еще блок:
case
when x == 3 && x < 2 then 'apple'
when x == 3 && x > 2 then 'orange'
end
В книге Ruby Programming Language Матц говорит, что эта последняя форма является простой (и редко используемой) формой, которая является не чем иным, как альтернативным синтаксисом для if / elsif / else. Однако, независимо от того, используется это редко или нет, я не вижу другого способа присоединить несколько выражений && для данного предложения «когда».