Type conversion 最干净的转换方法是什么&;str类型到数字类型?

Type conversion 最干净的转换方法是什么&;str类型到数字类型?,type-conversion,rust,Type Conversion,Rust,我发现自己正在阅读大型CSV文件,并将数字元素收集到一个Vec。此后,我必须将它们转换为数字类型,我发现最简单的方法是实现如下函数: fn to_u32(str: &str) -> u32 { let str_num: Option<u32> = str.parse(); match str_num { Some(num) => num, None => panic!("Failed to r

我发现自己正在阅读大型CSV文件,并将数字元素收集到一个
Vec
。此后,我必须将它们转换为数字类型,我发现最简单的方法是实现如下函数:

fn to_u32(str: &str) -> u32
{
    let str_num: Option<u32> = str.parse();
    match str_num
    {
        Some(num) => num,
        None      => panic!("Failed to read number"),
     }
 }
fn到u32(str:&str)->u32
{
让str_num:Option=str.parse();
匹配str_num
{
Some(num)=>num,
None=>panic!(“读取数字失败”),
}
}
这似乎是一个相当常见的操作,所以我已经筛选了参考文档,但没有找到任何与之匹配的内容。有没有更干净的方法可以做到这一点?

好吧,你可以使用它来避免模式匹配,但你应该谨慎地使用它-使用
unwrap()
你无法处理实际的解析错误,因此如果字符串不代表数字,它会死机:

let str_num: u32 = str.parse().unwrap();
如果let
也是一个选项:

if let Some(str_num) = str.parse::<u32>() {
    // ...
}
或者,您可以使用哪个实例来表示
u32

let str_num: u32 = str.parse().unwrap_or_default();
好的,您可以使用来避免模式匹配,但是您应该谨慎地进行-使用
unwrap()
您无法处理实际的解析错误,因此如果字符串不表示数字,它将死机:

let str_num: u32 = str.parse().unwrap();
如果let
也是一个选项:

if let Some(str_num) = str.parse::<u32>() {
    // ...
}
或者,您可以使用哪个实例来表示
u32

let str_num: u32 = str.parse().unwrap_or_default();
该类型有多种适配器方法,可以使用这些方法比重复的
match
s更好地读取数据

例如,如果
选项
,则会产生恐慌。
expect
方法实际上最接近您编写的代码:
str.parse().expect(“读取数字失败”)


然而,使用此处列出的其他函数来传播错误,避免恐慌的“崩溃”,并允许用户(或您自己)更集中地处理错误,并进行更多的控制,这通常是有意义的。使用它通常也是有意义的,这给了您在错误情况下传递更多信息的机会,也允许您使用,也就是说,您可以轻松定义一个等价的
try用于
选项

macro_rules! option_try {
    ($e: expr) => {
        match $e {
            Some(x) => x,
            None => return None
        }
    }
}
该类型有多种适配器方法,可以使用这些方法比重复的
match
s更好地读取数据

例如,如果
选项
,则会产生恐慌。
expect
方法实际上最接近您编写的代码:
str.parse().expect(“读取数字失败”)


然而,使用此处列出的其他函数来传播错误,避免恐慌的“崩溃”,并允许用户(或您自己)更集中地处理错误,并进行更多的控制,这通常是有意义的。使用它通常也是有意义的,这给了您在错误情况下传递更多信息的机会,也允许您使用,也就是说,您可以轻松定义一个等价的
try用于
选项

macro_rules! option_try {
    ($e: expr) => {
        match $e {
            Some(x) => x,
            None => return None
        }
    }
}

或者,您可以使用
csv
板条箱,它将为您执行所有基于类型的解码。自述和文档中有一些示例。或者,您可以使用
csv
板条箱,它将为您执行所有基于类型的解码。自述和文档中有一些示例。