在 ruby​​ 循环中更改索引变量

Isa*_*tto 4 ruby iteration

我意识到这可能违反 ruby​​ 原则并且看起来有点傻,但我很好奇是否可以在 ruby​​ 循环迭代期间修改索引变量。

这种做法在 Java/C 中是可能的,在这个人为的例子中使用 for 循环:

for (int k = 0; k < 10; k++)
{
   if (k == 5)
      k = 8;
}
Run Code Online (Sandbox Code Playgroud)

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

fot*_*nus 5

实际上 for 语义如下:

for(executed_once_before_all; test; execute_every_loop) { /* code */ }
Run Code Online (Sandbox Code Playgroud)

所以,在红宝石中:

executed_once_before_all
while test do
  execute_every_loop
  # code
end 
Run Code Online (Sandbox Code Playgroud)

所以你的例子是这样的:

k = 0
while k < 10 do
  k = 8 if (k == 5)
  k += 1
end         
Run Code Online (Sandbox Code Playgroud)