为什么self.f2()以下代码中的调用使借阅检查器跳闸?else块不是在其他范围内吗?这是一个难题!
use std::str::Chars;
struct A;
impl A {
fn f2(&mut self) {}
fn f1(&mut self) -> Option<Chars> {
None
}
fn f3(&mut self) {
if let Some(x) = self.f1() {
} else {
self.f2()
}
}
}
fn main() {
let mut a = A;
}
操场
error[E0499]: cannot borrow `*self` as mutable more than once at a time
--> src/main.rs:16:13
|
13 | if let Some(x) = self.f1() {
| ---- first mutable borrow occurs here
...
16 | self.f2()
| ^^^^ second mutable borrow occurs here
17 | }
| - first borrow ends here
自我借入的范围不是以self.f1()电话开始还是结束吗?一旦来自的呼叫f1()返回f1()不再使用self,因此借用检查器应该不会对第二个借用有任何问题。请注意以下代码也会失败...
// ...
if let Some(x) = self.f1() {
self.f2()
}
// ...
操场
我认为这里的第二次借阅应该很好f1,f3并且不要self与同时使用f2。
当年话下