欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > [rustlings]13_error_handling

[rustlings]13_error_handling

2025/9/27 21:13:38 来源:https://blog.csdn.net/qq_45698138/article/details/140554362  浏览:    关键词:[rustlings]13_error_handling

errors6
这一个就是在Err(E)中加了点手脚,就是Err(E)中E的类型也是一个Err类型.
这里是创建了一个新的Err类型,Err类型中有两种不同的枚举值.对于不同的枚举值代表两种不同的错误.

// Using catch-all error types like `Box<dyn Error>` isn't recommended for
// library code where callers might want to make decisions based on the error
// content instead of printing it out or propagating it further. Here, we define
// a custom error type to make it possible for callers to decide what to do next
// when our function returns an error.use std::num::ParseIntError;#[derive(PartialEq, Debug)]
enum CreationError {Negative,Zero,
}// A custom error type that we will be using in `PositiveNonzeroInteger::parse`.
#[derive(PartialEq, Debug)]
enum ParsePosNonzeroError {Creation(CreationError),ParseInt(ParseIntError),
}impl ParsePosNonzeroError {fn from_creation(err: CreationError) -> Self {Self::Creation(err)}// TODO: Add another error conversion function here.// fn from_parseint(???) -> Self { ??? }fn from_parseint(err: ParseIntError) -> ParsePosNonzeroError{ParsePosNonzeroError::ParseInt(err)}
}#[derive(PartialEq, Debug)]
struct PositiveNonzeroInteger(u64);impl PositiveNonzeroInteger {fn new(value: i64) -> Result<Self, CreationError> {match value {x if x < 0 => Err(CreationError::Negative),0 => Err(CreationError::Zero),x => Ok(Self(x as u64)),}}fn parse(s: &str) -> Result<Self, ParsePosNonzeroError> {// TODO: change this to return an appropriate error instead of panicking// when `parse()` returns an error.let x: i64 = match s.parse(){Ok(t) => t,Err(e) => {return Err(ParsePosNonzeroError::from_parseint(e));},};Self::new(x).map_err(ParsePosNonzeroError::from_creation)}
}fn main() {// You can optionally experiment here.
}#[cfg(test)]
mod test {use super::*;#[test]fn test_parse_error() {assert!(matches!(PositiveNonzeroInteger::parse("not a number"),Err(ParsePosNonzeroError::ParseInt(_)),));}#[test]fn test_negative() {assert_eq!(PositiveNonzeroInteger::parse("-555"),Err(ParsePosNonzeroError::Creation(CreationError::Negative)),);}#[test]fn test_zero() {assert_eq!(PositiveNonzeroInteger::parse("0"),Err(ParsePosNonzeroError::Creation(CreationError::Zero)),);}#[test]fn test_positive() {let x = PositiveNonzeroInteger::new(42).unwrap();assert_eq!(x.0, 42);assert_eq!(PositiveNonzeroInteger::parse("42"), Ok(x));}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词