处理多个函数参数类型的惯用方法

RFT*_*xas 8 rust

我对 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
Run Code Online (Sandbox Code Playgroud)

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

我不是在这里寻找泛型。实际上,就我而言,Type_A是一个 Rustndarray实例,并且TYPE_B是一个自定义struct.

Jan*_*anL 13

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

enum MyParam {
    TypeA(ndarray),
    TypeB(SomeStruct),
}
Run Code Online (Sandbox Code Playgroud)

函数体类似于:

fn my_func(param: MyParam) {
    match param {
        TypeA(my_narray) => {
           ...
        },
        TypeB(my_struct) => {
           ...
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

你会这样称呼它

my_func(MyParam::TypeA(the_array));
my_func(MyParam::TypeB(the_struct));
Run Code Online (Sandbox Code Playgroud)