Ruby’Range.last’没有给出最后一个值。 为什么?
在ruby Range对象中使用三点符号时,我得到:
(0...5).each{|n| pn} 0 1 2 3 4
当我使用’last’方法时,我得到:
(0...5).last => 5
我原以为4
这是一个错误吗? 或者是否有一些我不了解Range对象的概念?
这是设计的。 Ruby 2.0文档更具体 :
请注意,如果没有参数,则
last
将返回定义范围结束的对象,即使exclude_end?
是true
。(10..20).last #=> 20 (10...20).last #=> 20 (10..20).last(3) #=> [18, 19, 20] (10...20).last(3) #=> [17, 18, 19]
正如Stefan所回答的那样,您的观察到的行为是可以预期的
如果要获取范围枚举的最后一个元素而不必枚举整个范围,可以使用Enumerable#reverse_each
irb> (0...5).reverse_each.first => 4
- 使用Rack-Zippy在Heroku中提供压缩资产
- 参数超出范围Rails 4和bootstrap3-datetimepicker-rails
- 在ruby 1.9中是否有一种方法可以从字符串中删除无效的字节序列?
- Rails 4错误:ArgumentError – 参数数量错误
- Ruby on Rails:如何让多个提交按钮转到不同的方法(可能带有with_action?)
- Ruby中现有PDF中的水印
- activerecord -3.1.11出错无法找到表(ActiveRecord :: Statement Invalid)
- 在开发模式下重新激活多个worker
- Rails:将axlsx视图生成的文件发送到模型