与此question完全相同,我希望函数的返回类型为特征,返回值为实现该特征的类型的实例。一个简单的例子:

fn myfunction() -> Box<Printable> {
    box TypeB{val: 2} as Box<Printable>
}

如果我没有明确地将其放入具有通用特征的盒子中,则会得到:



所以我想知道:
  • 如果是在Rust中进行正常操作以返回特征类型
  • 的正常方法
  • 为什么Rust编译器无法推断会自动向下转换

  • 任何想法?我正在使用编译器的当前夜间版本。

    最佳答案

    是的,像这样的trait对象是返回trait的正确方法,尽管在可能的情况下,返回没有Box的具体类型更为灵活:该函数的调用者可以在需要时进行装箱/播放。如果那不可能直接实现,则定义并返回enum可能会起作用。 (拳击和特质对象在某种程度上应被视为不得已:它通常不如其他策略有效。)

    不幸的是,隐式强制还没有从返回值中推断出来(它们在其他情况下也是如此,例如foo(box bar)会在需要时将该参数强制转换为特征对象);希望可以修复此问题,但目前需要显式强制转换。

    关于casting - 将特性作为函数的返回值,并进行显式强制转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24594024/

    10-10 18:33
    查看更多