如何检查功能参数的类型?

时间:2020-04-24 14:20:44

标签: types rust

我有一个功能:

fn my_function(my_float:f32) -> f32{
     my_float - 1.55
}

使用此函数,如果我传递一个整数,(当然)我会得到一个错误:

expected type f32 found type {integer}

我想知道是否有一种方法可以从函数内部处理错误(或任何其他方法),例如如果用户传递字符串,整数或其他类型。

1 个答案:

答案 0 :(得分:4)

Rust是一种静态类型的编译语言。这样,它可以在编译时固定每个函数的类型。也就是说,通常您要确定函数接受的类型。

如果只想将不同的内容传递给函数,则可以使用泛型:

fn doit<T>(t: T) {...}

通过这种方式,您可以将不同的内容传递给doit,但是仍然需要在编译时决定。

现在,可以在运行时将不同的东西传递给函数了。

一种可能性是创建一个枚举:

enum MyType {
    F32(f32),
    Str(String),
    USize(usize),
}

然后,您的函数可以接受参数MyType,并可以决定要做什么。这种方法要求您预先(即在编译时)指定要允许使用的函数类型。

另一种运行时方法可能涉及Any

fn doit(t: &dyn std::any::Any) {
    match t.downcast_ref::<usize>() {
        Some(u) => println!("its usize: {}", u),
        None => println!("not usize"),
    }
}

fn main() {
    doit(&2usize);
    doit(&("sdf".to_string()));
}

我通常更喜欢在编译时做更多的事情,因为它倾向于更早地发现错误。