作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
与此完全相同 question ,我希望函数的返回类型是一个特征,返回值是实现该特征的类型的实例。一个简单的例子:
fn myfunction() -> Box<Printable> {
box TypeB{val: 2} as Box<Printable>
}
如果我没有显式地转换成我的通用特征框,我会得到:
error: mismatched types: expected
Box<Printable>
but foundBox<TypeB>
(expected trait Printable but found struct TypeB)
所以我想知道:
有什么想法吗?我使用的是当前的夜间版本的编译器。
最佳答案
是的,像这样的 trait 对象是返回 trait 的正确方法,尽管如果可能的话,返回一个没有 Box
的具体类型会更灵活:该函数的调用者可以 box/如果他们需要的话。如果那不是直接可能的,那么定义并返回一个 enum
可能会起作用。 (装箱和特征对象应该被视为最后的手段:它通常不如其他策略有效。)
不幸的是,隐式强制转换还不能从返回值中推断出来(它们在其他上下文中会这样做,例如 foo(box bar)
将在需要时将该参数强制转换为特征对象);这有望得到修复,但现在需要显式转换。
关于casting - 特征作为函数的返回值,并显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24594024/
我是一名优秀的程序员,十分优秀!