【问题标题】:Idiomatic way to handle multiple function argument types处理多个函数参数类型的惯用方法
【发布时间】:2022-01-06 04:55:25
【问题描述】:

我是 Rust 的新手,我需要一些关于如何在 Rust 中为一个参数处理多种类型的指导。我什至不知道这是否可能。

我有一个函数可以进行大量计算,并且其某些指令可能会根据参数的类型而有所不同。

在 Python 中,它将显示为:

def foo(bar):
   # Do a bunch of computations
   if isinstance(bar, TYPE_A):
       # Do this
   elif isinstance(bar, TYPE_B):
       # Do that

我什至不知道这在 Rust 中是否可行,甚至不推荐。函数体非常丰富,在函数体中使用 match 语句处理这种基于类型的条件似乎比使用支持两种不同类型的两个非常相似的函数更清晰。

我不是在这里寻找泛型。实际上在我的例子中,Type_A 是一个 Rust ndarray 实例,TYPE_B 将是一个自定义的 struct

【问题讨论】:

  • 我猜你想使用枚举。 enum Foo { A(i32), B(String), ... } .. 类型的内部值是实际的有效载荷。通过一些模式匹配,您可以从枚举中获取正确的值并做任何您想做的事情。在幕后,这就像 C 中的类型联合。

标签: rust


【解决方案1】:

如果没有泛型,您最好的选择是定义一个包含两个变体的枚举。

enum MyParam {
    TypeA(ndarray),
    TypeB(SomeStruct),
}

函数体类似于:

fn my_func(param: MyParam) {
    match param {
        TypeA(my_narray) => {
           ...
        },
        TypeB(my_struct) => {
           ...
        },
    }
}

你会这样称呼它

my_func(MyParam::TypeA(the_array));
my_func(MyParam::TypeB(the_struct));

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2014-01-28
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多