我有一个特征MyTrait
和一个实现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>>>
的方法。
如何解决这个问题?