我可以用特征对象键入内省然后向下转换吗?

GGa*_*zzi 10 rust

我有一个集合Trait,一个迭代它并执行某些操作的函数,然后我想检查实现者类型,如果它是类型Foo然后向下转换它并调用一些Foo方法.

基本上,类似于Go的类型切换和界面转换.

搜索我发现任何特征,但它只能在'static类型上实现.

为了帮助展示我想要的东西:

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();
    //}
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*eev 9

正如您所注意到的,向下转换只适用于Any特征,是的,它只支持'static数据.你可以在这里找到最近的讨论原因.基本上,实现任意寿命参考的反射是困难的.

现在,至少可以Any轻松地与您的自定义特征相结合.但是,最近创建了一个用于自动实现特征的宏库Any.你也可以在这里找到一些讨论.