【发布时间】:2020-05-15 11:09:18
【问题描述】:
我有一个元素向量,我遍历并检查某些属性(不可变)。在某些情况下,我会对该向量中的单个项目执行可变操作,然后更新容器。我该怎么做?
struct A {
buffer: Vec<B>,
}
impl A {
fn update(&self) {}
}
struct B {}
impl B {
fn check(&self) -> bool { true }
fn do_stuff(&mut self) {}
}
fn main() {
let mut a = A { buffer: vec![B{}] };
for b in a.buffer.iter_mut() { // mutable borrow occurs here
if b.check() {
b.do_stuff();
a.update(); // imutable borrow occurs here
}
}
}
或者,如果我选择不可变的iter()。是否有可能在do_stuff 的范围内使其可变?
【问题讨论】:
-
更新方法是作用于
buffer还是作用于其他一些字段? -
IMO,到目前为止,最简单的方法是按索引迭代容器。不是很漂亮,但很有效。
-
@rolisz。 imutalbe 在缓冲区
-
@rodrigo。是的,你是对的。不过,我一直在寻找更土气的东西。让我们看看
标签: rust immutability borrowing