RUBY — ошибка оператора одной строки

#ruby

Вопрос:

когда я пытаюсь написать эту строчку, если нет, возникает ошибка. Как мне это исправить?

 def odd_or_even(number)
  number % 2 == 0 ? return "even" : return "odd"
end

odd_or_even(3)
 

Комментарии:

1. удалите оба return s

2. Тоже косметическая вещь, но подумайте 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"