gpt4 book ai didi

rust - 自动将字符串解析为最合适的类型

转载 作者:行者123 更新时间:2023-12-03 11:40:32 29 4
gpt4 key购买 nike

如何将某些字符串解析为最合适的类型?
我知道有.parse::<>()方法,但是您需要像这样预先指定类型:

fn main() {
let val = String::from("54");
assert_eq!(val.parse::<i32>().unwrap(), 54i32);

let val = String::from("3.14159");
assert_eq!(val.parse::<f32>().unwrap(), 3.14159f32);

let val = String::from("Hello!");
assert_eq!(val.parse::<String>().unwrap(), "Hello!".to_string());
}
但是我需要这样的东西:
fn main() {
let val = String::from("54");
assert_eq!(val.generic_parse().unwrap(), 54i32); // or 54i16 or 54 u32 or etc ...

let val = String::from("3.14159");
assert_eq!(val.generic_parse().unwrap(), 3.14159f32);

let val = String::from("Hello!");
assert_eq!(val.generic_parse().unwrap(), "Hello!".to_string());
}
是否有合适的箱子可用于这种情况?我不想在第十次重新发明轮子。
编辑
这是我实际上要执行的操作:
struct MyStruct<T> {
generic_val: T,
}

fn main() {
let val = String::from("54");
let b = MyStruct {generic_val: val.parse().unwrap()};

let val = String::from("3.14159");
let b = MyStruct {generic_val: val.parse().unwrap()};
}
错误:
error[E0282]: type annotations needed for `MyStruct<T>`
--> src/main.rs:7:13
|
7 | let b = MyStruct {generic_val: val.parse().unwrap()};
| - ^^^^^^^^ cannot infer type for type parameter `T` declared on the struct `MyStruct`
| |
| consider giving `b` the explicit type `MyStruct<T>`, where the type parameter `T` is specified

最佳答案

您需要以正确的Enum类型为基础,并为其实现FromStr。像这样。

#[derive(PartialEq, Debug)]
enum Val {
Isize(isize),
F64(f64),
}

impl core::str::FromStr for Val {
type Err = & 'static str;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match (s.parse::<isize>(), s.parse::<f64>()) {
(Ok(i),_) => Ok(Val::Isize(i)),
(Err(_), Ok(f)) => Ok(Val::F64(f)),
(Err(_), Err(_)) => Err("neither parser worked"),
}
}
}

fn main() {
assert_eq!("34".parse(), Ok(Val::Isize(34)));
assert_eq!("12.3".parse(), Ok(Val::F64(12.3)));
assert!("wrong".parse::<Val>().is_err());
}

关于rust - 自动将字符串解析为最合适的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64226048/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com