Ruby .times .upto .downto等.抵消印刷值

Ath*_*han 0 ruby

有没有办法来抵消代码块中传递的值.

例如

C# - 这将始终打印5

for (int i = 0; i < 10; i++)
{
  i=5
  Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

Ruby - 这将只打印5次10次.

10.times do |i|
  i = 5
  puts i
end
Run Code Online (Sandbox Code Playgroud)

有没有办法得到| i | 回到5?

还有一个问题.你如何使.times块跳过(不会一直增加1)

sep*_*p2k 7

不,你不能复位的计数器times,upto从块内等.

您可以使用redo重新启动循环的当前迭代,在这种情况下将具有类似的效果:

10.times do |i|
  i = 5
  puts i
  redo
end
Run Code Online (Sandbox Code Playgroud)

这将永远打印5(尽管请注意,初始值i仍将0在每次迭代时).

如果您需要更多控制,则需要使用while循环.虽然我建议在大多数情况下你认为自己需要这个,但实际上并没有,而你只是从错误的角度来解决问题.