Type conversion 最干净的转换方法是什么&;str类型到数字类型?
我发现自己正在阅读大型CSV文件,并将数字元素收集到一个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
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
板条箱,它将为您执行所有基于类型的解码。自述和文档中有一些示例。