我想改变Outer
struct ,在它的实现之外使用它自己,而不复制它的属性.如何在Rust中正确实现它?有没有一种简单的方法可以同时拥有可变和不可变的引用?
下面是代码示例(也许这有点牵强,但它很好地说明了我面临的问题):
use std::sync::Mutex;
#[derive(Debug)]
struct Inner {
n: i64,
factor: i64,
}
#[derive(Debug)]
struct Max {
v: i64
}
#[derive(Debug)]
struct Outer {
inners: Vec<Inner>,
max: Max,
}
fn main() {
let mutex_s = Mutex::new(Outer {
inners: vec![
Inner { n: 1, factor: 2 },
Inner { n: 2, factor: 2 },
Inner { n: 3, factor: 3 },
Inner { n: 4, factor: 3 },
],
max: Max { v: 5 },
});
let mut s = mutex_s.lock().unwrap();
s.inners.retain(|i| i.n * i.factor < s.max.v);
println!("{:?}", s);
}
在这里,我得到以下错误:cannot borrow 's' as immutable because it is also borrowed as mutable
.
我想这里我需要内部可变性,但我不确定如何正确、优化和有效地实现它.