【问题标题】:Rust function that returns different type of value depending on type annotation根据类型注释返回不同类型值的 Rust 函数
【发布时间】:2020-01-23 17:14:38
【问题描述】:

我想要根据类型注释返回不同类型值的函数,例如:

give_five::<String>(); // returns "five"
give_five::<i32>(); // returns 5
give_five::<f32>(); // return 5.0

我试着写,但它不起作用。我知道为什么它不起作用。但我不知道该怎么做。

fn give_five<String>() -> String {
    String::from("five")
}
fn give_five<i32>() -> i32 {
    5
}
fn give_five<f32>() -> f32 {
    5.0
}

我从rand crate 得到这个想法。既然能做到

let mut rng = rand::thread_rng();
let x: i32 = rng.gen();
let y: f32 = rng.gen();

【问题讨论】:

    标签: rust


    【解决方案1】:

    这是通过定义一个特征来完成的:

    trait GiveFive {
        fn give_five() -> Self;
    }
    

    并为您想要的类型实现它:

    impl GiveFive for &'static str {
        fn give_five() -> &'static str {
            return "five";
        }
    }
    
    impl GiveFive for i32 {
        fn give_five() -> i32 {
            return 5;
        }
    }
    
    impl GiveFive for f32 {
        fn give_five() -> f32 {
            return 5.0;
        }
    }
    

    然后使用它:

    fn main() {
        let x: &str = GiveFive::give_five(); // returns "five"
        let y: i32 = GiveFive::give_five(); // returns 5
        let z: f32 = GiveFive::give_five(); // return 5.0
    }
    

    fn main() {
        let x = <&str>::give_five(); // returns "five"
        let y = i32::give_five(); // returns 5
        let z = f32::give_five(); // return 5.0
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2021-06-05
      • 2022-11-27
      • 2011-06-27
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多