小编Daz*_*ins的帖子

将 Option<RefCell<T>> 转换为 Option<&T>

我们知道将 type 值转换RefCell<T>为 type 值&T以用作函数中的参数很容易:

fn main() {
    let a: RefCell<i32> = RefCell::new(0);
    my_func(a.borrow().deref());
}

fn my_func(i: &i32) {}
Run Code Online (Sandbox Code Playgroud)

在我的场景中,RefCells 存储在 a 中HashMap,因此它们被包装在Option. 我还希望传递给它们的函数具有选项的概念,但我只想传递非可变引用,而不是整个RefCell. 我们可以这样实现:

fn main() {
    let a: Option<RefCell<i32>> = Some(RefCell::new(0));

    match a {
        Some(ref_cell) => my_func(Some(ref_cell.borrow().deref())),
        None => my_func(None)
    };
}

fn my_func(i: Option<&i32>) {}
Run Code Online (Sandbox Code Playgroud)

这是可行的,但在我的特定场景中,my_func将其中的几个Option<&T>作为参数,因此这样做意味着match每个参数都会嵌套并呈指数增长。因此,采取某种方式这样做会很有帮助:

fn main() {
    let a: Option<RefCell<i32>> = Some(RefCell::new(0));

    let c = match a …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
446
查看次数

标签 统计

rust ×1