这绝对没有意义:
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中修复的吗? (运行窗口)
答案 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。
更新:添加说明