- Ruby基础知识
- Ruby - 主页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 评论
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 例外
Ruby - 范围
范围随处可见:一月到十二月、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
作为条件的范围
范围也可以用作条件表达式。例如,以下代码片段从标准输入打印多组行,其中每组中的第一行包含单词start和单词结束的最后一行-
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
这将产生以下结果 -
5 lies in (1..10) c lies in ('a'..'j')