更新2: 为了记录,这是我采用的做法(感谢Jorg的建议):
100.step(2, -2) do |x|
# my code
end
(显然有很多方法可以做到这一点;但听起来这是最“Ruby”的方法;这正是我想要的。)
更新:好的,我正在寻找step
:
(2..100).step(2) do |x|
# my code
end
但事实证明,我在最初的问题中并没有完全表达清楚。实际上,我想要倒着遍历这个范围。令我惊讶的是,负步长是不合法的。
(100..2).step(-2) do |x|
# ArgumentError: step can't be negative
end
那么,我该如何反向执行这个操作呢?
我完全不懂Ruby,所以请温柔点。
假设我想迭代从2到100的偶数范围,我应该怎么做?
显然,我可以这样做:
(2..100).each do |x|
if x % 2 == 0
# my code
end
end
但是,显然(再次强调),那样做非常愚蠢。
我知道我可以做这样的事情:
i = 2
while i <= 100
# my code
i += 2
end
我相信我也可以编写自己的自定义类,提供自己的
each
方法。不过,我几乎确认这会过度设计。我对两件事情感兴趣:
1. 是否有使用标准范围语法的某些变体实现这一点(即,
(x..y).each
)?
2. 无论哪种方式,用最惯用的“Ruby way”完成这个任务是什么(使用范围或其他方式)?就像我所说的,我是新手;因此,您在如何用更典型的Ruby风格完成任务方面提供的任何指导都将不胜感激。
step
参数已经清楚地记录了。我能找到的最旧的文档是Ruby 1.8.6的文档,而且它早在2007年就已经存在了。 - Jörg W Mittag