我正在查看一些如下所示的代码:
for mut i in 2..points.len() {
// Do something
if some_condition {
i += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
它编译并运行良好(看起来)。我的第一直觉是,将其作为循环会更好while。然后我开始想,这在 Rust 中一般是合法的吗?如果增量i超出范围会发生什么?我猜显然有麻烦......
我想知道在修改索引时是否存在任何问题。我假设该值i保持在范围内,但我有兴趣知道当它超出该范围时会发生什么。
你的代码
for mut i in 2..points.len() {
// Do something
if some_condition {
i += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
将在编译器内部使用 , 以更简单的术语重写loop为如下所示:
let mut iter = (2..points.len()).into_iter();
loop {
if let Some(mut i) = iter.next() {
// Do something
if some_condition {
i += 1;
}
} else {
break
}
}
Run Code Online (Sandbox Code Playgroud)
在这种形式中,希望应该更清楚这里实际发生的情况:i在循环体内声明,并在每次迭代开始时从范围迭代器中分配下一个值。如果您修改它,它将在下一次迭代中重新分配。具体来说,您无法进行更改i以影响循环当前迭代之外的任何内容。
| 归档时间: |
|
| 查看次数: |
2390 次 |
| 最近记录: |