- 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')
广告