Fab*_*aru 5 casting traits rust
与这个问题完全一样,我希望函数的返回类型是特征,返回值是实现该特征的类型的实例。一个简单的例子:
fn myfunction() -> Box<Printable> {
box TypeB{val: 2} as Box<Printable>
}
Run Code Online (Sandbox Code Playgroud)
如果我不明确地将其放入具有通用特征的盒子中,则会得到:
错误:类型不匹配:预期
Box<Printable>但已发现Box<TypeB>(预期特征可打印但已发现结构TypeB)
所以我想知道:
任何的想法?我正在使用编译器的当前夜间版本。
是的,像这样的特征对象是返回特征的正确方法,尽管如果可能的话,返回不带 a 的具体类型Box更灵活:该函数的调用者可以根据需要进行装箱/强制转换。如果这不能直接实现,定义并返回一个enum可能可行。(拳击和特质对象应该被视为最后的手段:它通常不如其他策略有效。)
不幸的是,隐式强制转换还不能从返回值中推断(它们在其他上下文中会这样做,例如,foo(box bar)如果需要,将将该参数强制为特征对象);这有望得到解决,但目前需要显式转换。
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |