1
コード:`RefCell <Vec <Weak<Gadget> >>`フィールド型のstructにデバッグを実装する方法は?
struct Owner {
name: String,
gadgets: RefCell<Vec<Weak<Gadget>>>,
}
//code omitted
impl fmt::Debug for Owner {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Owner {{ name: {}, gadgets: {:?} }}", self.name, self.gadgets.into_inner())
}
}
fn main() {
let gadget_owner : Rc<Owner> = Rc::new(Owner { /**/ });
let gadget1 = gadget_owner.make_gadget(1);
println!("gadget1 is: {:?}", gadget1);
}
がエラーをもたらす:
error: cannot move out of borrowed content [E0507]
src/main.rs:25 write!(f, "Owner {{ name: {}, gadgets: {:?} }}", self.name, self.gadgets.into_inner())
^~~~
むしろ無用フィラーを添加するよりも、なぜあなたは理解していない何を教えていませんか?所有権と借り入れが何であるか理解していますか?あなたは錆の本を読んだことがありますか? ['RefCell :: into_inner'](https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.into_inner)に関するドキュメントを読んだことがありますか? –
@MatthieuM。はい、今見ます、into_inner()がRefCellを破棄するので、私は最初にそれを借りなければなりません。 – bjornmelgaard
'RefCell'を破壊することは許されません。ところで、あなたがあなたの問題を解決した場合、自分自身に答えることをお勧めします:) –