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

我有一个功能:

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

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

expected type f32 found type {integer}

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

评论
  • 小不点er
    小不点er 回复

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

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

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

    This way, you can pass different things to doit, but you still have to decide at compile time.

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

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

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

    Then, your function could accept a parameter of MyType, and could decide what to do. This approach requires you to specify upfront (i.e. at compile time) which types you want to allow for your function.

    Another tun-time approach could involve 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()));
    }
    

    我通常喜欢在编译时尽可能多地做,因为它往往会更早地发现bug。