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

6.2.6. Обратные диапазоны

6.2.6. Обратные диапазоны

Имеет ли смысл говорить об обратном диапазоне? И да, и нет. Следующий диапазон допустим:

r = 6..3
x = r.begin # 6
y = r.end   # 3
flag = r.end_excluded? # false

Как видите, мы можем определить обе границы и узнать, что правая граница включена. Но этим перечень возможных операций практически исчерпывается.

arr = r. to_a     # []
r.each {|x| p x } # Ни одной итерации.
y = 5
r.include?(у)     # false (для любого значения y)

Означает ли это, что обратные диапазоны всегда бесполезны? Вовсе нет. В некоторых случаях разумно инкапсулировать границы в один объект.

На самом деле массивы и строки часто принимают обратные диапазоны в качестве индексов, поскольку индексация для них начинается с 0, если отсчитывать от левой границы, и с -1 — если от правой. Поэтому допустимы такие выражения:

string = "flowery
str1 = string[0..-2]  # "flower"
str2 = string[1..-2]  # "lower"
str3 = string[-5..-3] # "owe" (по существу, прямой диапазон)

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


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