我想要一个for根据条件递增的循环.循环通常应增加其索引i的1,但如果某些条件(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)
我该如何实现呢?
这可能是少数几个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
// 10Run Code Online (Sandbox Code Playgroud)