有没有办法来抵消代码块中传递的值。
例如
C# - 这将始终打印5
for (int i = 0; i < 10; i++)
{
i=5
Console.WriteLine(i);
}
Ruby - 这将只打印5次。
10.times do |i|
i = 5
puts i
end
有没有办法获得| i |回到5?
和另一个问题。你如何使.times块跳过(不会一直增加1)
答案 0 :(得分:7)
不,您无法从区块内重置times
,upto
等的计数器。
您可以使用redo
重新启动循环的当前迭代,在这种情况下会产生类似的效果:
10.times do |i|
i = 5
puts i
redo
end
这将永久打印5(但请注意,i
的初始值在每次迭代时仍为0
。
如果您需要更多控制,则需要使用while
循环。虽然我建议你在大多数情况下认为你需要这个,但你实际上并没有这样做,而你只是从错误的角度接近你的问题。
答案 1 :(得分:0)
如果需要,您可以使用'next'关键字跳过基于特定条件的迭代。
10.times do |i|
next if i < 5
puts i
end
您也可以使用sepp2k所描述的关键字'redo'。
答案 2 :(得分:-1)
这将打印值10次。
i=5
10.times{puts i}