Несколько проблем с вашим кодом.
step.include? "apples" or "banana" or "cheese"
Это выражение оценивается как:
step.include?("apples") or ("banana") or ("cheese")
Поскольку Ruby обрабатывает все значения, кроме false
и nil
, как true, это выражение всегда будет истинным. (В этом случае значение "banana"
вызовет короткое замыкание выражения и заставит его оценить как истинное, даже если значение шага не содержит ни одного из этих трех.)
Ваше намерение было:
step.include? "apples" or step.include? "banana" or step.include? "cheese"
Однако это неэффективно. Также он использует or
вместо ||
, который имеет другой приоритет оператора и обычно не должен использоваться в if
условных выражениях.
Обычное or
Использование:
do_something or raise "Something went wrong."
Лучший способ написать это было бы:
step =~ /apples|banana|cheese/
Здесь используется регулярное выражение , которое вы часто будете использовать в Ruby.
И, наконец, в Ruby нет метода say
, если вы его не определите. Обычно вы печатаете что-то, звоня puts
.
Итак, окончательный код выглядит так:
if step =~ /apples|banana|cheese/
puts "yay"
end