Более короткий способ вернуть переменную, если она существует в Ruby? - PullRequest
1 голос
/ 05 ноября 2010

Это более короткий, более элегантный и более СУХОЙ способ написать это в Ruby?

if first_variable
   first_variable # return variable if it exists
else
   second_variable # otherwise, return something else
end

Или это?

if first_variable
   first_variable.method_name 
else
   second_variable
end

Ответы [ 3 ]

16 голосов
/ 05 ноября 2010

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

return first_variable || second_variable

Ваш второй пример возвращает результат вызова метода, если first_variable не равен nil.Это отличается от вашего первого примера, поэтому я не понимаю, сравнивая их.Я также не понимаю, как вы используете СУХОЙ.Вы не повторяете себя в любом случае.Почему утверждение if беспокоит вас так сильно?Это не то, о чем вам следует беспокоиться.

1 голос
/ 05 ноября 2010

Ruby также поддерживает троичную операцию, известную из C:

return first_variable ? first_variable.method_name : second_variable

Другая возможность состоит в том, чтобы написать обычную версию «если» в одной строке, которая больше похожа на естественный язык:

return if first_variable then first_variable.method_name else second_variable end
0 голосов
/ 09 января 2019

Использование || - это единственный синтаксис, который является СУХИМ, используя базовый Ruby.Однако это не сработает:

  • , если вы хотите отклонить var1, когда он в истинном состоянии, например, ""
  • , если вы хотите сохранить var1, когдаон в ложном состоянии, например false (который отличается для ваших целей от nil)

Короче говоря, если ваша цель проверить, является ли var1 присутствующим , вам придется повторяться с каким-то синтаксисом var1.check ? var1 : var2 .(check не является реальным методом - я использую его для обозначения любой проверки, которую вы хотите выполнить, чтобы убедиться, что она присутствует для целей вашего приложения.)

Спрос gem, который я написал, обходит это и допускает синтаксис DRY:

return demand(var1, var2)

. Он проверяет, присутствует ли var1, и возвращает его, если так.В противном случае возвращается var2.

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