我可以使用特质对象进行自省,然后向下抠像吗?

我有一个Trait集合,一个函数遍历它并做一些事情,然后我想检查一下实现者types,如果它是Footypes的,那么将其下传并调用一些Foo方法。

基本上,类似于Go的types切换和界面转换 。

search我发现关于任何特质,但它只能在'statictypes'static上实现。

为了帮助certificate我想要的东西:

 let vec: Vec<Box<Trait>> = // for e in vec.iter() { e.trait_method(); // if typeof e == Foo { // let f = e as Foo; // f.foo_method(); //} } 

正如你所注意到的,向下转换只适用于Any特征,是的,它只支持'static数据”。 你可以在这里find最近的讨论。 基本上,对任意生命期的引用进行反思是很困难的。

(至less现在)也不可能很容易地将Any与你的习惯特性结合起来。 然而,最近已经创build了一个用于自动实现Any特性的macros库 。 你也可以在这里find一些讨论。