更新2:对于子孙后代,我就这样做了(感谢Jorg的输入):
100.step(2, -2) do |x|
# my code
end
Run Code Online (Sandbox Code Playgroud)
(显然有很多方法可以做到这一点;但听起来这是最"Ruby"的方式;而这正是我所追求的.)
更新:好的,所以我要找的是step:
(2..100).step(2) do |x|
# my code
end
Run Code Online (Sandbox Code Playgroud)
但事实证明,在我原来的问题中,我并非100%即将到来.我实际上想要向后迭代这个范围.令我惊讶的是,消极的一步是不合法的.
(100..2).step(-2) do |x|
# ArgumentError: step can't be negative
end
Run Code Online (Sandbox Code Playgroud)
那么:我该怎么做呢?
嘿伙计们,我对Ruby 很新,所以要温柔.
假设我想迭代从2到100的偶数范围; 我该怎么办?
显然我可以这样做:
(2..100).each do |x|
if x % 2 == 0
# my code
end
end
Run Code Online (Sandbox Code Playgroud)
但是,显然(再次),这将是非常愚蠢的.
我知道我可以这样做:
i = 2
while i <= 100
# my code
i += 2
end
Run Code Online (Sandbox Code Playgroud)
我相信我也可以编写自己的自定义类,提供自己的each方法(?).不过,我几乎可以肯定这会有点矫枉过正.
我对两件事感兴趣:
(x..y).each)进行此操作?Jör*_*tag 24
你不能Range用"步骤" 声明一个.范围没有步骤,只是有一个开始和结束.
你当然可以遍历过Range的步骤,例如像这样:
(2..100).step(2).reverse_each(&method(:p))
Run Code Online (Sandbox Code Playgroud)
但如果你想要的只是迭代,那么你首先需要的Range是什么呢?为什么不迭代?
100.step(2, -2, &method(:p))
Run Code Online (Sandbox Code Playgroud)
这具有额外的好处,不像reverse_each它不需要生成中间数组.
这个问题回答了您的问题:关于红宝石范围?
(2..100).step(2) do |x|
# your code
end
Run Code Online (Sandbox Code Playgroud)