对于具有条件增量的循环

0 ruby loops

我想要一个for根据条件递增的循环.循环通常应增加其索引i1,但如果某些条件(i == 20)得到满足,那么就应该设置的值i,以50(跳过21- 49).伪代码将是这样的:

for(i = 0; i < 100;)
  if i == 20
    i = 50
  else
    i = i++
  end 
end
Run Code Online (Sandbox Code Playgroud)

我该如何实现呢?

Jör*_*tag 5

这可能是少数几个while适合循环的情况之一:

i = 0
while i < 10
  if i == 2
    i = 5
  else
    i += 1
  end

  p i
end
# 1
# 2
# 5
# 6
# 7
# 8
# 9
# 10
Run Code Online (Sandbox Code Playgroud)

或者,您可以将自己的C风格for循环添加到语言中,它实际上非常简单:

class Proc
  def for(iter=->{}, &blk)
    return unless call
    yield
    iter.()
    self.for(iter, &blk)
  end
end

i = 0
-> { i < 10 }.for -> { if i == 2 then i = 5 else i += 1 end } { p i }
# 1
# 2
# 5
# 6
# 7
# 8
# 9
# 10
Run Code Online (Sandbox Code Playgroud)

这相当于以下C风格的for循环(在ECMAScript中演示):

for(let i = 1; i <= 10; i === 2 ? i = 5 : i++) {
  console.log(i);
}
// 1
// 2
// 5
// 6
// 7
// 8
// 9
// 10
Run Code Online (Sandbox Code Playgroud)