为什么(10..20).last与(10 ... 20).last相同

时间:2014-09-19 15:07:39

标签: ruby

为什么这两个是等价的?

(10..20).last     #=> 20
(10...20).last    #=> 20

这听起来像是Ruby 'Range.last' does not give the last value. Why?的副本,但这个问题的答案只是简单地说是设计的。为什么这样设计?当其他所有内容不同时,.....last返回相同的值会是什么目的?

1 个答案:

答案 0 :(得分:7)

我将回答您的问题:0.0...1.0的最后一个值是什么?

一般来说,not every Range is enumerable。对于具有排除结尾的此类范围,实际上没有比用于定义范围结束的值更有意义的last其他

另请注意,您可以枚举包含范围,其中last 不是枚举的最后一个值!

(0..3.2).to_a.last
# 3
(0..3.2).last
# 3.2
(0..Float::INFINITY).to_a.last
# don't wait up for this one

设计的动机是"用于定义范围结束的值"与"与范围"枚举的最后一个值不同。 last为您提供前者。