下面的代碼拋出錯誤:「不能搬出借來的內容」爲VEC但不是U64
struct Foo {
a: Vec<u64>,
}
impl Foo {
fn change_a(&mut self, new_a: Vec<u64>) {
self.a = *choose(&self.a, &new_a);
}
}
fn choose<'a>(x: &'a Vec<u64>, y: &'a Vec<u64>) -> &'a Vec<u64> {
return if x > y { x } else { y };
}
fn main() {
let mut foo = Foo { a: vec![1] };
foo.change_a(vec![3]);
println!("{:?}", foo.a);
}
的錯誤是:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:7:18
|
7 | self.a = *choose(&self.a, &new_a);
| ^^^^^^^^^^^^^^^^^^^^^^^^ cannot move out of borrowed content
This code works fine如果我只需更換Vec<u64>
小號u64
s。
有什麼區別?
也許是與向量元素的生命週期是從載體本身分開?即每個向量elem需要至少與'self.a'一樣長。 –