Диапазоны встречаются везде: с января по декабрь, от 0 до 9, строки с 50 по 67 и т. Д. Ruby поддерживает диапазоны и позволяет использовать диапазоны различными способами —
- Диапазоны как последовательности
- Диапазоны как условия
- Диапазоны как интервалы
Диапазоны как последовательности
Первое и, возможно, наиболее естественное использование диапазонов — это выражение последовательности. Последовательности имеют начальную точку, конечную точку и способ получения последовательных значений в последовательности.
Ruby создает эти последовательности, используя операторы диапазонов » .. » и » … » . Форма с двумя точками создает включающий диапазон, а форма с тремя точками создает диапазон, который исключает указанное высокое значение.
(1..5) #==> 1, 2, 3, 4, 5 (1...5) #==> 1, 2, 3, 4 ('a'..'d') #==> 'a', 'b', 'c', 'd'
Последовательность 1..100 хранится как объект Range, содержащий ссылки на два объекта Fixnum . Если вам нужно, вы можете преобразовать диапазон в список, используя метод to_a . Попробуйте следующий пример —
#!/usr/bin/ruby $, =", " # Array value separator range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"
Это даст следующий результат —
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ["bar", "bas", "bat"]
Диапазоны реализуют методы, которые позволяют вам перебирать их и тестировать их содержимое различными способами —
#!/usr/bin/ruby # Assume a range digits = 0..9 puts digits.include?(5) ret = digits.min puts "Min value is #{ret}" ret = digits.max puts "Max value is #{ret}" ret = digits.reject {|i| i < 5 } puts "Rejected values are #{ret}" digits.each do |digit| puts "In Loop #{digit}" end
Это даст следующий результат —
true Min value is 0 Max value is 9 Rejected values are 5, 6, 7, 8, 9 In Loop 0 In Loop 1 In Loop 2 In Loop 3 In Loop 4 In Loop 5 In Loop 6 In Loop 7 In Loop 8 In Loop 9
Диапазоны как условия
Диапазоны также могут использоваться как условные выражения. Например, следующий фрагмент кода печатает наборы строк из стандартного ввода, где первая строка в каждом наборе содержит слово начало, а последняя строка заканчивается словом —
while gets print if /start/../end/ end
Диапазоны можно использовать в операторах case —
#!/usr/bin/ruby score = 70 result = case score when 0..40 then "Fail" when 41..60 then "Pass" when 61..70 then "Pass with Merit" when 71..100 then "Pass with Distinction" else "Invalid Score" end puts result
Это даст следующий результат —
Pass with Merit
Диапазоны как интервалы
Окончательное использование универсального диапазона — это проверка интервала: определение того, попадает ли какое-либо значение в интервал, представленный диапазоном. Это делается с помощью ===, оператора равенства регистра.
#!/usr/bin/ruby if ((1..10) === 5) puts "5 lies in (1..10)" end if (('a'..'j') === 'c') puts "c lies in ('a'..'j')" end if (('a'..'j') === 'z') puts "z lies in ('a'..'j')" end
Это даст следующий результат —