我想在函数中重用标准库的ParseIntError
。但是,我自己在实现输入字符串的解析,因此不需要返回标准库返回的错误值。
我没有找到构造ParseIntError
值的方法。我发现的唯一解决方案是这样的:
use std::num::ParseIntError;
fn from_str_radix(s: &str, radix: u32) -> Result<(), ParseIntError> {
let error_empty = "".parse::<i32>().expect_err("get empty input error");
let error_invalid_digit = "Z".parse::<i32>().expect_err("get invalid digit error");
if s.is_empty() {
return Err(error_empty);
}
for c in s.chars().rev() {
match c.to_digit(radix) {
None => return Err(error_invalid_digit),
_ => unimplemented!(),
}
}
Ok(())
}
从我自己的代码中返回ParseIntError
的方法是否更优雅?
答案 0 :(得分:3)
当前无法自行构建ParseIntError
。当您找到它时,有一个开放的issue
要求将其公开。但是,我认为这不是好事。
ParseIntError
是num
模块的错误。并不是每个实现解析箱的人都可以使用它,因为您应该有自己的潜在错误。您可以使用IntErrorKind
,但我仍然认为这不是一件好事,因为您可能会因为没有相同的错误而结束。
因此,我认为您应该具有自己的错误类型,并且可能使用相同的设计,并具有带有enum
属性的#[non_exhaustive]
。有很多crates使错误更容易产生。您应该毫不犹豫地在自己的代码中使用自己的错误。