Rust double mut 在循环中借用
Rust double mut borrow in loops
正在寻找一种同时推入 Vec> 及其内部 Vec<> 的方法。我明白为什么它会失败,但仍在努力寻找一些优雅的方法来解决它。
fn example() {
let mut vec: Vec<Vec<i32>> = vec![];
vec.push(vec![]);
for i in &mut vec {
i.push(1);
if vec.len() < 10 {
vec.push(vec![]); // second mut borrow
}
}
}
借用检查器不允许您通过引用迭代向量并在迭代期间修改它。这样做的原因是修改向量可以重新分配其存储空间,这会使用于迭代的引用无效。 (还有一个问题,迭代一个变化的向量意味着什么,你想访问迭代期间添加的元素还是只访问最初存在的元素。)
允许您执行所需操作的最简单修复方法是使用索引迭代向量:
fn example() {
let mut vec: Vec<Vec<i32>> = vec![];
vec.push(vec![]);
let mut ind = 0;
while ind < vec.len() {
let i = &mut vec[ind];
i.push(1);
if vec.len() < 10 {
vec.push(vec![]);
}
ind += 1;
}
}
正在寻找一种同时推入 Vec
fn example() {
let mut vec: Vec<Vec<i32>> = vec![];
vec.push(vec![]);
for i in &mut vec {
i.push(1);
if vec.len() < 10 {
vec.push(vec![]); // second mut borrow
}
}
}
借用检查器不允许您通过引用迭代向量并在迭代期间修改它。这样做的原因是修改向量可以重新分配其存储空间,这会使用于迭代的引用无效。 (还有一个问题,迭代一个变化的向量意味着什么,你想访问迭代期间添加的元素还是只访问最初存在的元素。)
允许您执行所需操作的最简单修复方法是使用索引迭代向量:
fn example() {
let mut vec: Vec<Vec<i32>> = vec![];
vec.push(vec![]);
let mut ind = 0;
while ind < vec.len() {
let i = &mut vec[ind];
i.push(1);
if vec.len() < 10 {
vec.push(vec![]);
}
ind += 1;
}
}