问题描述
||
有没有一种方法可以抵消已在代码块中传递的值。
例如
C#-这将始终打印5
for (int i = 0; i < 10; i++)
{
i=5
Console.WriteLine(i);
}
红宝石-这将只打印5次10次。
10.times do |i|
i = 5
puts i
end
有没有办法获得| i |?回到5?
还有另一个问题。如何使.times块跳过(不一直增加1)
解决方法
不可以,您无法从块内重置
times
,upto
等的计数器。
您可以使用redo
重新启动循环的当前迭代,在这种情况下,将具有类似的效果:
10.times do |i|
i = 5
puts i
redo
end
这将永久打印5(尽管请注意,i
的初始值在每次迭代时仍为still7ѭ)。
如果需要更多控制,则需要使用while
循环。尽管我建议大多数情况下您认为需要这样做,但实际上并不需要,只是从错误的角度解决问题。
, 您可以根据需要使用\'next \'关键字来跳过迭代。
10.times do |i|
next if i < 5
puts i
end
您也可以按照sepp2k的描述使用关键字\'redo \'。
, 这将打印5个值十次。
i=5
10.times{puts i}