У диапазона есть метод ===, который проверяет, является ли аргумент частью диапазона.
Вы используете это так:
(1..10) === 5 #=> true
(1..10) === 15 #=> false
или как вы написали:
a= (1..10)
a === 5 #=> true
a === 16 #=> false
Вы должны быть уверены, что значения диапазона и тестируемое значение имеют совместимый тип, в противном случае будет выдано исключение.
(2.718..3.141) === 3 #=> true
(23..42) === "foo" # raises exception
- Это делается в O (1), так как Range # === (значение) сравнивает значение только с Range # first и Range # last.
- Если вы сначала вызываете Range # to_a, а затем Array # include?, Он запускается в O (n), так как Range # to_a должен заполнить массив n элементами, а Array # include? необходимо снова выполнить поиск по n элементам.
Если вы хотите увидеть разницу, откройте irb и наберите:
(1..10**9) === 5 #=> true
(1..10**9).to_a.include?(5) # wait some time until your computer is out of ram and freezess