#ruby
Вопрос:
когда я пытаюсь написать эту строчку, если нет, возникает ошибка. Как мне это исправить?
def odd_or_even(number)
number % 2 == 0 ? return "even" : return "odd"
end
odd_or_even(3)
Комментарии:
1. удалите оба
return
s2. Тоже косметическая вещь, но подумайте
number.even? ? "even" : "odd"
3.
number.even? and "even" or "odd"
вероятно, также работает, независимо от того, является ли?:
илиand/or
более читаемым4. @Arkku — Пока я кодирую, я никогда не встречал
condition and sth or sth
альтернативы троичному оператору. Я предполагаю, что это работает так же, но выглядит по меньшей мере странно (для меня, естественно, что на самом деле не является хорошим аргументом).5. @BroiSatse Да, это не очень идиоматичный Ruby, поэтому я бы также выбрал здесь тернарный оператор. Подобная конструкция довольно распространена в скрипте оболочки as
command amp;amp; foo || bar
. В Ruby я виделfoo or bar
иfoo and bar
с некоторой частотой, но, по общему признанию, не могу сразу придумать реальный пример с обоимиand
иor
.
Ответ №1:
Возврат находится не в том месте. У вас не может быть пробелов в 2 результатах тернарного оператора. Либо вы удаляете возврат, либо заключаете их в круглые скобки.
# cleanest way
number % 2 == 0 ? "even" : "odd"
# if it has to include the return in the outcomes
number % 2 == 0 ? (return "even") : (return "odd")
# if it needs a return
return number % 2 == 0 ? "even" : "odd"