2
노드가 다른 노드를 참조하는 순환 그래프와 같은 구조입니다. 간결함을 위해 몇 가지 물건을 제거했습니다. 나는 여전히 녹 내용을 시작하고있어, 나는순환 참조가 충분히 길지 않습니다.
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을 사용하지만, 나는 다음과 같은 컴파일 오류를 얻을 :
16 | println!("Value of node0.parent: {}", node0.borrow().parent.as_ref().unwrap().borrow().value);
| ^^^^^^^^^^^^^^ does not live long enough
을 내가 잘못 뭐하는 거지
및
17 | println!("Value of node0: {}", node0.borrow().get_parent().borrow().value);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ does not live long enough
?
이미 알고 있었지만 놀이터 예제를 업데이트하여 차용을 나누었습니다. 희망적으로 그것은 조금 더 도움이됩니다. –
하, 그건 내가 기대했던 것보다 훨씬 간단했다. 고맙습니다! – Newtang