不能迭代Ruby中的“反向范围”的原因?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我试着用Range来反向迭代,并且:

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

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

我似乎很奇怪上面的结构不会产生预期的结果。这是什么原因?

提问于
用户回答回答于

range是这样的:由开始和结束定义的东西,而不是内容。在一般情况下,在一定范围内“迭代”并不合乎情理。例如,考虑如何在两个日期产生的范围内“迭代”。你会重复一天吗?按月份?年份?按周?它没有明确定义。

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

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

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

用户回答回答于

扫码关注云+社区