代码:
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())
^~~~
答案 0 :(得分:1)
添加retreiving小工具ID
impl fmt::Debug for Owner {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let gadgets = self.gadgets.borrow();
let ids: Vec<i32> = gadgets.iter()
.map(|ref x| {
x.upgrade()
.unwrap()
.id
})
.collect();
write!(f, "Owner {{ name: {}, gadgets: {:?} }}", self.name, ids)
}
}
输出:
gadget1 is: Gadget { id: 1, owner: Owner { name: Gadget Man, gadgets: [1, 2] } }
gadget2 is: Gadget { id: 2, owner: Owner { name: Gadget Man, gadgets: [1, 2] } }
https://n-n662xy6uqbadudjpoghatx4igmurid667k365ni-script.googleusercontent.com