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

  # 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,最后一行包含单词 end.:

  while gets

  print if /start/../end/

  end

  范围可以用在 case 语句中:

  #!/usr/bin/ruby

  score = 70

  result = case score

  when 0..40: "Fail"

  when 41..60: "Pass"

  when 61..70: "Pass with Merit"

  when 71..100: "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')

  (编辑:雷林鹏 来源:网络)

最新文章

  1. excel常用技巧
  2. Hadoop_UDTF示例
  3. Yii CModel中rules验证 获取错误信息
  4. notification.setLatestEventInfo(context, title, message, pendingIntent); undefined
  5. MySql创建一个存储过程
  6. 【转】缓存淘汰算法系列之3——FIFO类
  7. [国嵌笔记][027][ARM协处理器访问指令]
  8. Go_Hello word
  9. TCP/IP,Web世界的基本规则
  10. Spring Boot(三):AOP&amp;日志操作&amp;异常处理
  11. git 创建项目
  12. C 单向链表就地逆转
  13. SNF软件开发机器人教程更新
  14. Leetcode : eImplement strStr
  15. 数据库---mysql的介绍和安装
  16. Python开发【模块】:Celery 分布式异步消息任务队列
  17. 【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
  18. 02_Spark Application不同模式下的监控
  19. WPF 获取指定文件的Icon
  20. day 15 装饰器

热门文章

  1. Android数据存储之SQLite 数据库学习
  2. SQL Server 存储过程生成流水号
  3. Oracle管理监控之测试环境清理用户脚本
  4. as modern frameworks have warmed people to the idea of using builder-type patterns and anonymous inner classes for such things
  5. 转!!java 堆栈内存 对象实例等查看
  6. Block Towers---cf626c(二分)
  7. Python开发【面试】:刷题
  8. UEM用户行为了如指掌!
  9. Django自带的加密算法及加密模块
  10. IScroll5中文API整理,用法与参考