Rust 一个 RC RefCell 的小例子。

◇◆丶佛笑我妖孽 提交于 2020-04-24 09:10:52

Rc 和 Refcell 并不能违反 Rust 的借用原则,多个只读,一个可写借用。

use std::cell::RefCell;
use std::rc::Rc;
use core::borrow::BorrowMut;

#[derive(Debug)]
struct Tree {
    name: String,
    nodes: RefCell<Vec<Node>>,
}
#[derive(Debug)]
struct Node {
    id: String,
    tree: Rc<Tree>,
}

fn main() {

   let tree1 = Tree {name: "tree1".into(), nodes: RefCell::new(vec![])};
    let tree1rc = Rc::new(tree1);
    let node1 = Node {id: "node1".into(), tree: tree1rc.clone()};
    let node2 = Node {id: "node2".into(), tree: tree1rc.clone()};
    tree1rc.nodes.borrow_mut().push(node1);
    tree1rc.nodes.borrow_mut().push(node2);

    println!("tree1: {:#?}", tree1rc.nodes.borrow()[0].id);
    println!("tree1: {:#?}", tree1rc.nodes.borrow()[1].id);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!