私が正しく理解した場合、Rust でaを介して変更可能な借用を作成することはできません。 orを使用する必要があります。しかし、とにかく私はそれらを使用する方法を理解できません。たとえば、次の簡単な例を考えてみましょう。std::rc::Rc
Cell
RefCell
use std::cell::RefCell;
struct X (i32);
impl X {
fn foo(&mut self) {
self.0 = 0;
}
}
fn main () {
let x = X(5);
let rcx = RefCell::new(&x);
let mut mutx: std::cell::RefMut<&X> = rcx.borrow_mut();
(*mutx).foo();
}
次のエラーが表示されます。
16:5: 16:9 error: cannot borrow immutable local variable `mutx` as mutable
16 mutx.foo();
しかし、行から参照を削除した場合 (および のタイプを更新した場合mutx
):
let rcx = RefCell::new(x);
すべて順調。RefMut::deref_mut() -> &mut T
しかし、 16 行目で呼び出された deference&&mut T
は最初のケースでは返され、2 番目のケースでは返されるはずなので、その理由がわかりません&mut T
。しかし、コンパイラは必要に応じて多くを適用する必要があるため ( deref 強制*
がどのように機能するかがわかれば)、 と の間に違いはないはずです。RefMut<X>::deref_mut()
RefMut<&X>::deref_mut()
編集mut
:リンクされた例が正しく書かれているので、間違って15行目に書くのを忘れました。だから今はlet mut mutx...