Ruby 教程
- 第1节:Ruby 简介
- 第2节:Ruby 环境
- 第3节:Ruby 安装 – Unix
- 第4节:Ruby 安装 – Windows
- 第5节:Ruby 中文编码
- 第6节:Ruby 命令行选项
- 第7节:Ruby 环境变量
- 第8节:Ruby 语法
- 第9节:Ruby 数据类型
- 第10节:Ruby 类和对象
- 第11节:Ruby 类案例
- 第12节:Ruby 变量
- 第13节:Ruby 运算符
- 第14节:Ruby 注释
- 第15节:Ruby 条件判断
- 第16节:Ruby 循环
- 第17节:Ruby 方法
- 第18节:Ruby 块
- 第19节:Ruby 模块(Module)
- 第20节:Ruby 字符串(String)
- 第21节:Ruby 数组(Array)
- 第22节:Ruby 哈希(Hash)
- 第23节:Ruby 日期 & 时间(Date & Time)
- 第24节:Ruby 范围(Range)
- 第25节:Ruby 迭代器
- 第26节:Ruby 文件的输入与输出
- 第27节:Ruby File 类和方法
- 第28节:Ruby Dir 类和方法
- 第29节:Ruby 异常
- 第30节:Ruby 面向对象
- 第31节:Ruby 正则表达式
- 第32节:Ruby 数据库访问 – DBI 教程
- 第33节:Ruby 连接 Mysql – MySql2
- 第34节:Ruby CGI 编程
- 第35节:Ruby CGI方法
- 第36节:Ruby CGI Cookies
- 第37节:Ruby CGI Sessions
- 第38节:Ruby 发送邮件 – SMTP
- 第39节:Ruby Socket 编程
- 第40节:Ruby XML, XSLT 和 XPath 教程
- 第41节:Ruby Web Services 应用 – SOAP4R
- 第42节:Ruby 多线程
- 第43节:Ruby JSON
- 第44节:Ruby RubyGems
Ruby 范围(Range)
范围(Range)无处不在:January 到 December、 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 值分隔符
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
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')