完全以与此question相同的方式,我希望函数的返回类型是特征,返回值是实现该特征的类型的实例。一个简单的例子:
fn myfunction() -> Box<Printable> {
box TypeB{val: 2} as Box<Printable>
}
如果我没有明确地投入到我的通用特征的框中,我得到:
错误:类型不匹配:预期
Box<Printable>
但找到了Box<TypeB>
(预期特性可打印,但发现结构类型B)
所以我想知道:
有什么想法吗?我正在使用当前的夜间版本的编译器。
答案 0 :(得分:2)
是的,像这样的特征对象是返回特征的正确方法,但是,如果可能的话,返回一个没有Box
的具体类型会更灵活:如果他们可以使用该函数的调用者需要。如果这不是直接可能的,那么定义和返回enum
可能会有效。 (拳击和特质对象应该被认为是最后的手段:它的效率往往低于其他策略。)
不幸的是,隐式强制还没有从返回值推断出来(它们在其他情况下也是如此;例如foo(box bar)
会强制将该参数强制转换为特征对象);这有望得到修复,但现在需要明确的演员。