我有一个这样的函数,其中函数的用户指定输出的类型:
pub fn test(user_input: &str, number: f32) -> ??? {
if user_input == "f32"{
number as f32
} else if user_input == "f64" {
number as f64
} else {
panic!();
}
}
Run Code Online (Sandbox Code Playgroud)
我对 Rust 比较陌生,所以我问你,如何让这个函数返回用户要求的类型?我只对 f32 和 f64 输出感兴趣。
你不能。Rust 是静态类型语言,因此必须在编译时知道类型。它不能依赖于用户输入。
\n您可以做的是定义一个联合类型,例如:
\nenum Float {\n Single(f32),\n Double(f64),\n}\nRun Code Online (Sandbox Code Playgroud)\n然后写
\npub fn test(user_input: &str, number: f32) -> Float {\n if user_input == "f32"{\n Single(number as f32)\n } else if user_input == "f64" {\n Double(number as f64)\n } else {\n panic!();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但我不明白这样的功能有什么用处。
\n更新:或者你可以创建一个共同的特征,但在返回位置你必须将它装箱。喜欢:
\ntrait Float { \xe2\x80\xa6 }\n\nimpl Float for f32 { \xe2\x80\xa6 }\n\nimpl Float for f64 { \xe2\x80\xa6 }\nRun Code Online (Sandbox Code Playgroud)\n然后写
\npub fn test(user_input: &str, number: f32) -> Box<dyn Float> {\n if user_input == "f32"{\n Box::new(number as f32)\n } else if user_input == "f64" {\n Box::new(number as f64)\n } else {\n panic!();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这对于大型对象(例如具有关联编解码器的整个缓冲区)有意义,但对于单个值,开销相对较大。
\n| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |