Mic*_*yin 6 error-handling code-reuse rust
我想在我的函数中重用标准库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(())
}
Run Code Online (Sandbox Code Playgroud)
ParseIntError有没有更优雅的方式从我自己的代码返回?
目前还没有办法自己构建ParseIntError。当您找到它时,有一个issue要求将其公开的开放。但是,我认为这不是一个好主意。
ParseIntError是模块的错误num。它并不适合每个实现解析箱的人使用,因为您应该有自己的潜在错误。您可以使用IntErrorKind,但我仍然认为这不是一件好事,因为您最终可能不会出现相同的错误。
所以,我认为你应该有自己的错误类型,并且可能使用相同的设计,有一个enumwith#[non_exhaustive]属性。您应该毫不犹豫地在自己的代码中使用自己的错误。请参阅非常好的文章Rust 中的错误处理 - 深入探讨。(我个人并不同意文章中的所有内容,但仍然是高质量的,我建议使用snafu或thiserror)
| 归档时间: |
|
| 查看次数: |
5460 次 |
| 最近记录: |