私はおおよそ次のコードを持っています:
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);
しかし、なぜ失敗するのでしょうか。可変ポインターと不変ポインターが取得されるスコープは異なり、それらは異なる式です。私には一種のバグのように見えますが、ここで何かが欠けていないことを確認したいだけです。