在迭代结构体的可变成员并更改其他成员时,如何避免 Rust 中的第二次借用

问题描述 投票:0回答:1

我正在尝试编写一段代码,借用向量最后一个成员的可变副本,然后更改向量的另一个成员。检查向量是否有超过 2 个元素,因此同一元素没有变化。

pub fn adjust(&mut self) {
    if self.vec.len() < 2 {
        return;
    }
    let vec_last = self.vec.last_mut().unwrap();
    let mut iter = vec_last.iter_mut();
    while let Some(i) = iter.next() {
        self.vec[0].push(i.clone());
    }
}

编译器产生预期的错误

cannot borrow self.vec as mutable more than once at a time

有没有办法在不触发错误的情况下进行此类更改?

干杯

rust mutable borrow
1个回答
0
投票

您可以分成两个可变切片:

pub fn adjust(&mut self) {
    if self.vec.len() < 2 {
        return;
    }
    let (first, rest) = self.vec.split_first_mut().unwrap();
    let last = rest.last().unwrap();
    for x in last {
        first.push(x.clone());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.