有什么原因,我们不能在ruby中的“reverse Range”上迭代?

我试图使用一个范围和每个反向迭代:

(4..0).each do |i|
  puts i
end
==> 4..0

迭代通过0..4写入数字。在另一个范围r = 4..0似乎是确定,r.first == 4,r.last == 0。

对我来说,上面的结构不会产生预期的结果似乎是奇怪的。这是什么原因?当这种行为是合理的情况下是什么?

范围只是:由其开始和结束而不是由其内容定义的东西。在一个范围内的“迭代”在一般情况下没有真正意义。例如,考虑如何“迭代”两个日期生成的范围。你会按天迭代吗?按月?按年?一周?它没有明确定义。 IMO,允许前进范围的事实应该被视为方便的方法。

如果你想在这样的范围内反向迭代,你总是可以使用downto:

$ r = 10..6
=> 10..6

$ (r.first).downto(r.last).each { |i| puts i }
10
9
8
7
6

这里是some more thoughts从别人为什么很难,以允许迭代和一贯地处理反向范围。

http://stackoverflow.com/questions/2070574/is-there-a-reason-that-we-cannot-iterate-on-reverse-range-in-ruby

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:有什么原因,我们不能在ruby中的“reverse Range”上迭代?