- 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 - 范围
范围无处不在:1月到12月,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 保持为包含对两个Fixnum对象的引用的 Range 对象。如果需要,可以使用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,最后一行包含单词ends:
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
范围作为区间
多功能范围的最终用途是作为区间测试:查看某个值是否落在范围表示的区间内。这是使用 ===(case 等式运算符)完成的。
#!/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')
广告