【问题标题】:return generic type without generic argument in rust在 rust 中返回没有泛型参数的泛型类型
【发布时间】:2021-11-06 23:04:03
【问题描述】:

我有一个代码,我想在其中创建一个库的包装器,以使其与我的其他代码的工作原理相同。为了避免编写数百个结构,我正在创建一个通用结构(Worker)。但我正在使用该函数对其进行配置,并将该信息作为枚举传递:

fn configure(config: Config) -> Worker<T> {
    match config {
        some_config => Worker<some_type>,
        _ => {...}
}

由于我已经将信息作为枚举传递,我想避免将类型参数传递给函数,但显然 rust 抱怨因为 T 没有定义。

有没有办法让 rust 推断出某些东西的返回泛型的类型?我虽然也使用过宏,但我不知道它是否是正确的解决方案。知道如何解决这个问题吗? 提前感谢您的宝贵时间!

【问题讨论】:

  • 我没有完全理解这个问题。如果你说它返回Worker&lt;T&gt;,那么some_type 总是必须是T,你应该提前知道。如果你希望它返回不同的类型,enum 或 dyn 几乎是唯一的选择。

标签: generics rust


【解决方案1】:

如果我理解正确,T 的具体类型将根据枚举中传递的内容而有所不同。

但你不能用泛型来做到这一点。对于为T 填写的任何具体类型,函数的每个分支都需要返回相同的类型。你不能有一个函数,它基于一些枚举或if 语句返回,比如Vec&lt;String&gt; 与Vec&lt;u32&gt;。

解决方法:也将它们包装在一个枚举中。

或者使用特征而不是泛型。然后您的函数可以返回,例如,Box&lt;dyn Worker&gt; 和 Worker 是一个特征。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多