Вы можете смело unwrap
значение, если знаете, что это Some(T)
. Rc<T>
должен работать как прозрачный контейнер, который отменяет ссылки на вызовы методов, поэтому вы обычно можете рассматривать Rc<T>
как T
или, в частности, RefCell<T>
в вашем случае, тогда вы можете взаимодействовать со значением внутри RefCell
с использованием методов borrow
и borrow_mut
. Пример:
use std::rc::Rc;
use std::cell::RefCell;
// Definition for a binary tree node.
#[derive(Debug, PartialEq, Eq)]
pub struct TreeNode {
pub val: i32,
pub left: Option<Rc<RefCell<TreeNode>>>,
pub right: Option<Rc<RefCell<TreeNode>>>,
}
impl TreeNode {
#[inline]
pub fn new(val: i32) -> Self {
TreeNode {
val,
left: None,
right: None
}
}
}
fn main() {
let mut root = Some(Rc::new(RefCell::new(TreeNode::new(1))));
let mut root = root.unwrap();
println!("{:?}", root.borrow().val); // read access
root.borrow_mut().val = 2; // write access
}
игровая площадка
См. Также Распаковать и получить доступ к T из Option >