Книга: Программирование на языке Ruby

6.2.4. Проверка принадлежности диапазону

6.2.4. Проверка принадлежности диапазону

Зачем нужен диапазон, если нельзя проверить, принадлежит ли ему конкретный объект? Эта задача легко решается с помощью метода include?:

r1 = 23456..34567
x = 14142
y = 31416
r1.include?(x) # false
r1.include?(у) # true

У этого метода есть также синоним member?.

А как он работает? Как интерпретатор определяет, принадлежит ли объект диапазону? Просто путем сравнения с границами (поэтому проверка принадлежности диапазону возможна лишь, если определен осмысленный оператор <=>). Следовательно, запись (a..b).include?(x) эквивалентна x >= a and x <= b. Еще раз предупреждаем: будьте осторожны со строковыми диапазонами!

s1 = "2".."5"
str = "28"
s1.include?(str) # true (неправильно!)

Оглавление книги


Генерация: 5.477. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз