이상한 대출 확인 :나는 대략 다음과 같은 코드가 실패
그것은 다음과 같은 메시지와 함께 실패let val = util::replace(&mut self.some_field[i], self.some_method());
:
unrelated.rs:61:65: 61:70 error: cannot borrow `*self` as immutable because it is also borrowed as mutable
unrelated.rs:61 let val = util::replace(&mut self.some_field[i], self.some_method());
^~~~~
unrelated.rs:61:36: 61:62 note: second borrow of `*self` occurs here
unrelated.rs:61 let val = util::replace(&mut self.some_field[i], self.some_method());
^~~~~~~~~~~~~~~~~~~~~~~
가 나는 다음과 같은 코드로이 문제를 해결할 수 있습니다
let temp = self.some_method();
let val = util::replace(&mut self.some_field[i], temp);
하지만 왜 실패하나요? 변경할 수있는 포인터와 변경 불가능한 포인터를 구분하는 범위는 서로 다른 표현식입니다. 그것은 나에게 버그의 종류처럼 보이지만, 나는 단지 내가 여기에 뭔가를 놓치지 않고 있는지 확인하고 싶다. 다음 self
발매 먼저 some_method()
계산하고 self
의 some_field
에 가변 기준을 얻었다 :
대단히 고마워, 내가 생각했던거야. 내가 버그 추적기에서 찾았어야 했어. –