2
私はノードが他のノードを参照する循環グラフのような構造を持っています。私は簡潔にするためにいくつかのものを削除しました。循環参照が十分に長く生きていません
16 | println!("Value of node0.parent: {}", node0.borrow().parent.as_ref().unwrap().borrow().value);
| ^^^^^^^^^^^^^^ does not live long enough
:私は出力にノードの親の価値をしようとしているが、私は次のようにコンパイルエラーを取得する私はまだちょうど錆を学ぶために始めている、と私は参照
use std::cell::RefCell;
use std::rc::*;
fn main() {
let node1 = Node::new(1);
let node0 = Node::new(0);
node0.borrow_mut().parent = Some(node1.clone());
node1.borrow_mut().parent = Some(node0.clone());
//works
println!("Value of node0: {}", node0.borrow().value);
//neither of the following work
println!("Value of node0.parent: {}", node0.borrow().parent.as_ref().unwrap().borrow().value);
println!("Value of node0: {}", node0.borrow().get_parent().borrow().value);
}
struct Node {
value: i32,
parent: Option<Rc<RefCell<Node>>>
}
impl Node{
fn new(val: i32) -> Rc<RefCell<Node>> {
Rc::new(RefCell::new(Node {
value: val,
parent: None
}))
}
fn get_parent(&self) -> Rc<RefCell<Node>> {
self.parent.as_ref().unwrap().clone()
}
}
としてRust borrowed pointers and lifetimesとhttps://github.com/nrc/r4cppp/blob/master/graphs/src/rc_graph.rsを使用しました
と
17 | println!("Value of node0: {}", node0.borrow().get_parent().borrow().value);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ does not live long enough
私が間違って何をしているのですか?
私はすでにこれを受け入れていることを知っていますが、Playgroundの例を更新して、それぞれの借り入れを分割しています。うまくいけばそれはもう少し役立ちます。 –
ハ、それは私が予想していたよりずっと簡単でした。ありがとうございました! – Newtang