【发布时间】:2014-08-12 15:02:05
【问题描述】:
这完全没有意义:
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 中修复的吗? (运行窗口)
【问题讨论】:
-
见@DaveNewton 的解释here。
-
谢谢,我已将此问题标记为重复问题。
-
在一张纸上画一条 20.5cm 长的线。每 0.5 厘米标记一次。标记从 -20 到 +20 的标记。将您的手指放在标记为
10的那个上。右侧有多少个小于1的标记?没有任何!从 10 到 1 的范围为空。数学就是这样,直觉上就是这样,Ruby 也是这样。或者,如果您不喜欢与数学进行比较,那么只需查看 Ruby 中Range协议的定义:基本上Range#each表示i = left; while i <= right do i = i.succ; yield i end。现在想想while循环运行的频率。 -
在数学中,集合的范围是最大和最小成员之间的差。