English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Диапазон (Range) везде: от a до z, от 0 до 9 и т.д. 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 # -*- coding: UTF-8 -*- # определение диапазона digits = 0..9 puts digits.include?(5) ret = digits.min puts "минимальное значение #{ret}" ret = digits.max puts "максимальное значение #{ret}" ret = digits.reject {|i| i < 5 } puts "не соответствующие условиям: #{ret}" digits.each do |digit| puts "в цикле #{digit}" end
Результат выполнения примера выше:
true минимальное значение 0 максимальное значение 9 не соответствующие условиям: [5, 6, 7, 8, 9] в цикле 0 в цикле 1 в цикле 2 в цикле 3 в цикле 4 в цикле 5 в цикле 6 в цикле 7 в цикле 8 в цикле 9
диапазон также можно использовать в условных выражениях. Например, следующий фрагмент кода печатает строки из стандартного ввода, где каждая коллекция первой строки содержит слово startв последней строке содержится слово end.:
while gets print if /start/../end/ end
диапазон можно использовать в операторе case:
#!/usr/bin/ruby # -*- coding: UTF-8 -*- score = 70 result = case score when 0..40 "糟糕的分数" when 41..60 "快要及格" when 61..70 "Пройденная оценка" when 71..100 "Хорошая оценка" else "Неправильная оценка" end puts result
Результат выполнения примера выше:
Пройденная оценка
Последнее использование области - это проверка интервала: проверить, находится ли заданное значение в заданном интервале. Для выполнения расчета необходимо использовать оператор === равенства.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- if (1..10) === 5 puts "5 в (1..10)" end if "('a'..'j')" === "c" puts "c в ('a'..'j')" end if "('a'..'j')" === "z" puts "z в ('a'..'j')" end
Результат выполнения примера выше:
5 в (1..10) c в ('a'..'j')