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

时间:2011-06-12 08:50:19

标签: ruby

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

例如

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)

3 个答案:

答案 0 :(得分:7)

不,您无法从区块内重置timesupto等的计数器。

您可以使用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}