Проверьте, равна ли переменная одному из двух значений
Я хочу проверить, является ли a
равна 1 или 2
я мог бы сделать
a == 1 || a == 2
но это требует повторения a
(что было бы раздражающим для более длинных переменных)
Я хотел бы сделать что-то вроде a == (1 || 2)
, но очевидно, что это не сработает
я мог бы сделать [1, 2].include?(a)
, что не плохо, но меня поражает как немного труднее читать
просто интересно, как это сделать с идиоматическим ruby
7 ответов:
ваш первый метод-идиоматический Ruby. К сожалению, Ruby не имеет эквивалента Python
a in [1,2]
, что, я думаю, было бы лучше. Ваш[1,2].include? a
это ближайшая альтернатива, и я думаю, что это немного назад от самого естественного способа.конечно, если вы используете это много, вы могли бы сделать это:
class Object def member_of? container container.include? self end end
и тогда вы можете сделать
a.member_of? [1, 2]
.
Я не знаю, в каком контексте вы используете это, но если это вписывается в оператор switch, вы можете сделать:
a = 1 case a when 1, 2 puts a end
некоторые другие преимущества заключаются в том, что при использовании оператора case equality===, поэтому, если вы хотите, вы можете переопределить этот метод для другого поведения. Другое, что вы также можете использовать диапазоны с ним тоже, если это соответствует вашему случаю использования:
when 1..5, 7, 10
одним из способов было бы ходатайство "Matz", чтобы добавить эту функциональность в спецификацию Ruby.
if input == ("quit","exit","close","cancel") then #quit the program end
но оператор case-when уже позволяет вам делать именно это:
case input when "quit","exit","close","cancel" then #quit the program end
когда написано на одной строке, как это, он действует и почти выглядит как оператор if. Является ли нижний пример хорошей временной заменой для верхнего примера? Ты будешь судьей.