在C语言中,我可以使用索引以嵌套的方式可变地迭代数组。在Rust中,我可以使用索引实现类似的操作,但是如果我想使用迭代器而不是索引怎么办?
例如下面的代码段编译成功,因为两个借用都是不可变的:
这将导致:
我理解需要限制数据的写入访问,但我也想知道有经验的Rust用户如何仅使用迭代器实现这一点 - 假设出于教育目的,索引不可用。
例如下面的代码段编译成功,因为两个借用都是不可变的:
let xs = [0, 1, 2];
for x in &xs {
for y in &xs {
println!("x={} y={}", *x, *y);
}
}
但是如果我想使用可变迭代器呢?
let mut xs = [0, 1, 2];
for x in &mut xs {
*x += 1;
for y in &mut xs {
*y += 1;
println!("x={} y={}", *x, *y);
}
}
这将导致:
error[E0499]: cannot borrow `xs` as mutable more than once at a time
我理解需要限制数据的写入访问,但我也想知道有经验的Rust用户如何仅使用迭代器实现这一点 - 假设出于教育目的,索引不可用。
while let
来实现这个目的。 - Mistyx
和y
指向xs
中的同一项并用于更改此项。除了使用索引之外,唯一的解决方法是将xs
更改为Cell
向量,以限制可变访问的范围。 - Jmb