假设有一个实现trait Bird
的元素Sparrow
,现在我想将trait对象投射到鸟身上.
阅读SO上的其他答案,我假设能够将其转换为Any
,然后继续使用downcast_ref
选项.
不幸的是,这似乎不适用于我的情况
let bird: Rc<RefCell<dyn Bird>> = Rc::new(RefCell::new(Sparrow{ }));
let any_bird: &dyn Any = &bird;
let sparrow_option = any_bird.downcast_ref::<Sparrow>();
if sparrow_option.is_some() {
println!("TAG OK");
} else {
println!("TAG ERROR");
}
我能做些什么来实际将Rc<RefCell<dyn Bird>>
的trait 内容投射到Sparrow
?