Rust 如何处理Rc中包装的新类型枚举的模式匹配? 出身背景
我正在编写一个库,一些相关代码如下所示: 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=>{/*做点什么*/} } }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结构中,如
我需要为每个变量创建新的类型结构,这并不优雅。解决方案非常简单:可以通过语法.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的东西,有什么方法可以实现我的目标吗?