为什么"每个" -a范围只适用于递增范围?

时间:2014-08-12 15:02:05

标签: ruby range ruby-2.0

这绝对没有意义:

irb(main):001:0> (1..10).each do |x|
irb(main):002:1*   puts x
irb(main):003:1> end
1
2
3
4
5
6
7
8
9
10
=> 1..10

,而:

irb(main):004:0> (10..1).each do |x|
irb(main):005:1*   puts x
irb(main):006:1> end
=> 10..1

如果你不能混合和匹配两者,那么提供范围迭代器和支持递减范围的重点是什么?这是在新版本的ruby中修复的吗? (运行窗口)

2 个答案:

答案 0 :(得分:2)

事实证明,不支持递减范围。确实10..1属于类范围,但迭代它不会产生任何结果(考虑(10..1).to_a,一个空列表)

答案 1 :(得分:1)

Ruby中的范围仅用于递增值。这可以用于数字

(1..5).to_a
[1,2,3,4,5]

甚至是字母

('a'..'e').to_a
['a','b','c','d','e']

您可以尝试其他选项。你可以做到

10.downto(1).to_a

在Ruby中,范围使用< =>运算符以确定迭代是否结束;

5 <=> 1 == 1
5 is greater than 1

下一个值为4,不大于5,但小于5。

更新:添加说明