在ruby循环中更改索引变量

时间:2013-06-07 02:29:53

标签: ruby iteration

我意识到这可能违反ruby原则并且可能看起来有些愚蠢,但我很想知道在Ruby中循环迭代期间是否可以修改索引变量。

这种做法可以在Java / C中使用这个设计示例中的for循环:

for (int k = 0; k < 10; k++)
{
   if (k == 5)
      k = 8;
}

同样,我知道可以使用Enumerable#each_with_index访问索引变量,但我感兴趣的是能够在此实例中更改变量而不是访问它。

3 个答案:

答案 0 :(得分:4)

实际上for语义如下:

for(executed_once_before_all; test; execute_every_loop) { /* code */ }

等等,在红宝石中:

executed_once_before_all
while test do
  execute_every_loop
  # code
end 

所以你的例子是这样的:

k = 0
while k < 10 do
  k += 1
  k = 8 if (k == 5)
end         

答案 1 :(得分:0)

在Ruby中更改for循环计数器不会改变迭代次数。

您可以更改计数器变量,但这只会影响当前迭代:

> for k in 0...10
>   k = 8 if k == 5
>   puts k
> end
0
1
2
3
4
8  # Note this!
6
7
8
9

实现所需行为的最佳方法是使用while循环作为@fotanus建议。

当然,您可以使用for语句使用next循环执行此操作,但这更难看:

for k in 0...10
  next if k > 5 && k <= 8
  ... do stuff ...
  next if k == 5
  ... do stuff ...
end

答案 2 :(得分:-2)

你可以这样做,但Ruby程序员通常不使用for循环(虽然它可用)。你也可以这样做:

[0,1,2,3,4,5,8,9,10].each do |index|
  # your code here
end