有没有简化这段代码的方法?
fn parse(line: &str) -> Result<(usize, f64), String> {
let mut it = line.split_whitespace();
let n = it.next().ok_or("Invalid line")?;
let n = n.parse::<usize>().map_err(|e| e.to_string())?;
let f = it.next().ok_or("Invalid line")?;
let f = f.parse::<f64>().map_err(|e| e.to_string())?;
Ok((n, f))
}
fn main() {
println!("Results: {:?}", parse("5 17.2").unwrap())
}
在实际代码中,我需要在一行中解析4个值,编写.map_err(|e| e.to_string())
很无聊。
据我了解,不可能为ParseIntError
/ParseFloatError
实现std::convert::From
转换成String
,因为这些类型都没有在我的代码中定义,我是对的吗?
我看到简化这段代码的一种方法:
fn econv<E: ToString>(e: E) -> String {
e.to_string()
}
并且使用 .map_err(econv)
。还有其他简化代码的选项吗?