gpt4 book ai didi

casting - 特征作为函数的返回值,并显式转换

转载 作者:行者123 更新时间:2023-11-29 07:51:38 25 4
gpt4 key购买 nike

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

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

如果我没有显式地转换成我的通用特征框,我会得到:

error: mismatched types: expected Box<Printable> but found Box<TypeB> (expected trait Printable but found struct TypeB)

所以我想知道:

  • 如果这是在 Rust 中返回特征类型的正常方式
  • 为什么 Rust 编译器无法推断出自动向下转型

有什么想法吗?我使用的是当前的夜间版本的编译器。

最佳答案

是的,像这样的 trait 对象是返回 trait 的正确方法,尽管如果可能的话,返回一个没有 Box 的具体类型会更灵活:该函数的调用者可以 box/如果他们需要的话。如果那不是直接可能的,那么定义并返回一个 enum 可能会起作用。 (装箱和特征对象应该被视为最后的手段:它通常不如其他策略有效。)

不幸的是,隐式强制转换还不能从返回值中推断出来(它们在其他上下文中会这样做,例如 foo(box bar) 将在需要时将该参数强制转换为特征对象);这有望得到修复,但现在需要显式转换。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com