Rust 如何处理Rc中包装的新类型枚举的模式匹配? 出身背景

Rust 如何处理Rc中包装的新类型枚举的模式匹配? 出身背景,rust,Rust,我正在编写一个库,一些相关代码如下所示: pub结构MyStruct1; pub struct MyStruct2; pub enum MyEnum{ 变量1结构1, 变量2结构2 } //从这个板条箱里出来 fn foomy_enum:Rc{ 匹配&*my_enum.borrow{ Variant1my_struct1=>{/*做点什么*/}, Variant2my_struct2=>{/*做点什么*/} } } 目标 MyEnum始终使用Rc包装。因此,我想将其隐藏在newtype结构中,如

我正在编写一个库,一些相关代码如下所示:

pub结构MyStruct1; pub struct MyStruct2; pub enum MyEnum{ 变量1结构1, 变量2结构2 } //从这个板条箱里出来 fn foomy_enum:Rc{ 匹配&*my_enum.borrow{ Variant1my_struct1=>{/*做点什么*/}, Variant2my_struct2=>{/*做点什么*/} } } 目标 MyEnum始终使用Rc包装。因此,我想将其隐藏在newtype结构中,如中所述:

//只对板条箱公开 耻骨髓鞘; pub结构exposedmynumpubbrate Rc; 我不想让其他使用我的板条箱的人知道Rc的存在

问题 如果我使用ExposedMyEnum来隐藏恼人的Rc,我就不能像foo一样从这个板条箱中进行模式匹配

非消旋溶液 将原始代码更改为

结构MyStruct1; 结构MyStruct2; pub结构exposedysttruct1subcraterc; pub结构exposedystruct2ubclaterc; pub enum MyEnum{ 变量1公开系统结构1, variant2exposedystruct1 } //从这个板条箱里出来 fn foomy_enum:&MyEnum{ 匹配我的枚举(&U){ Variant1my_struct1=>{/*做点什么*/}, Variant2my_struct2=>{/*做点什么*/} } }
我需要为每个变量创建新的类型结构,这并不优雅。

解决方案非常简单:可以通过语法.0、.1等引用tuple和tuple-like-struct的成员,如下所示:

use std::cell::RefCell;
use std::rc::Rc;

pub struct MyStruct1;

pub struct MyStruct2;

pub(crate) enum MyEnum {
    Variant1(MyStruct1),
    Variant2(MyStruct2),
}

pub struct ExposedMyEnum(pub(crate) Rc<RefCell<MyEnum>>);

fn foo(my_enum: ExposedMyEnum) {
    match &*my_enum.0.borrow() {
        MyEnum::Variant1(my_struct1) => { /* do something */ }
        MyEnum::Variant2(my_struct2) => { /* do something */ }
    }
}

这是可行的,但我不想让其他使用我的板条箱的人知道Rc的存在,而foo是用户使用的示例方法。在您的实现中,借用的使用仍然泄漏了RefCell的东西,有什么方法可以实现我的目标吗?