此Rust代码无法编译:
struct Foo {
x: i32,
}
impl Foo {
fn bar(&mut self, x: i32) {}
fn foo(&mut self) {
self.bar(self.x);
}
}
由于此生命周期错误而失败:
error[E0503]: cannot use `self.x` because it was mutably borrowed
--> src/main.rs:9:18
|
9 | self.bar(self.x);
| ---- ^^^^^^ use of borrowed `*self`
| |
| borrow of `*self` occurs here
我不明白为什么Rust编译器遇到上述代码的问题。 x
按值传递,因此self
被调用时,bar
个成员变量中没有任何借位。该栏获得的self
与self
具有的foo
相同,因为在函数调用期间会将成员变量的副本发送到bar
。
我没有看到代码违反Rust借用机制的任何合理原因。