我有一个 traitMyTrait
和一个MyStruct
实现MyTrait
.
我还有一个接受Rc<RefCell<Box<MyTrait>>>
作为参数的函数。
在代码的某处,我创建了一个实例Rc<RefCell<Box<MyStruct>>>
:
let my_struct = Rc::new(RefCell::new(Box::new(MyStruct)));
当我传递my_struct
给我的函数时,我得到一个编译器错误:
错误:不匹配的类型:预期alloc::rc::Rc<core::cell::RefCell<Box<MyTrait>>>
,找到alloc::rc::Rc<core::cell::RefCell<Box<MyStruct>>>
我尝试Rc<RefCell<Box<MyStruct>>>
通过显式指定我需要的类型来创建一个实例来解决这个问题:
let my_struct: Rc<RefCell<Box<MyTrait>>> = Rc::new(RefCell::new(Box::new(MyStruct)));
在这种情况下,传递my_struct
给我的函数可以正常工作,但是我不能再通过变量访问任何MyStruct
特定字段。my_struct
而且这似乎不是一种贬低Rc<RefCell<Box<MyTrait>>>
到Rc<RefCell<Box<MyStruct>>>
.
我该如何解决这个问题?