Сочетание клавиш Ruby для «если (число в диапазоне), то …»

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Существует ли ярлык Ruby для следующего?

 if (x > 2) and (x < 10)
  do_something_here
end
  

Я думал, что видел что-то на этот счет, но не могу найти ссылку на это. Конечно, трудно выполнить поиск, когда вы не знаете, какой оператор вы ищете.

Ответ №1:

 if (3..9).include? x
  # whatever
end
  

В качестве дополнительного примечания вы также можете использовать оператор тройного равенства для диапазонов:

 if (3..9) === x
  # whatever
end
  

Это позволяет использовать их также в операторах case:

 case x
  when 3..9
    # Do something
  when 10..17
    # Do something else
end
  

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

1. тройное равенство — это ярлык, который я искал в этом конкретном случае! Спасибо!

Ответ №2:

 do_something if (3..9).include?( x )   # inclusive
do_something if (3...10).include?( x ) # inclusive start, exclusive end
  

Посмотрите на Range класс; вы можете прочитать введение к ним, размещенное на моем веб-сайте.

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

1. большое вам спасибо. и ваш веб-сайт — исключительный ресурс, о котором я не знал!!

2. Осторожно с Range#include? . Он оценивает каждый элемент в диапазоне, если диапазон не является числовым. в моей системе это ("aaaaaa".."zzzzzz").include?("zzzzzz") уже занимает 2 минуты . Для целых чисел, как указано в вопросе, это не проблема.

Ответ №3:

Сопоставимый#между?

 do_something if x.between?(2, 10)
  

Ответ №4:

Что-то вроде этого?

 do_something if (3..9) === x
  

или

 r = 3..9
if r === x
  . . .