Error reporting(错误报告) 在上一个练习中,我们必须解构TitleError变体以提取错误消息并将其传递给panic!宏。 这是错误报告的一个(基本)示例:将错误类型转换为可以向用户、开发者等显式的表示形式。 对于每个Rust开发人员来说,想
Error enums(错误枚举) 神人RustRover,你自己也知道你的代码逆天。上一节的代码给我整不会了,你怎么直接用字符串硬编码匹配错误呢? 不过RustRover自己也知道上一节代码不行,这一节就要做出一些改善了。 在团队协作时,同事可能会重新处理
Unwarpping 这个Unwarp,是Rust里面很重要的一个特性,中文可以翻译为拆封,不过我没见过有人用它的中文汉化的,还是保留英文名Unwarp。 回到正题上来,上一节的习题为Ticket::new实现了可处理异常的Result返回值,Ticket::new现在返
Fallibility(可错性) 重新回顾之前练习中的Ticket::new函数 impl Ticket { pub fn new( title: String, description: String, status: St
Nullability(可空性) 我们对assigned方法的实现相当直率,对to-do和done状态的ticket直接panic还是不太合适。 使用Rust中的Option类型可以做得更好。 Option Option是一种可以表示为null
Concise branching(简洁的分支) 上一节练习的代码可以写成这个样子: impl Ticket { pub fn assigned_to(&self) -> &str { match &self.status {
枚举变体可以携带数据 enum Status { ToDo, InProgress, Done, } 我们的枚举通常称为C风格的枚举(C-Style enum)。 每个变体都是一个简单的标签,有点像命名常量。很多其他的语言也有这种枚举方式:比如C/C++,Ja
match(模式匹配) 枚举类型比较常用的应用场景是用match语句来进行模式匹配。 enum Status { ToDo, InProgress, Done } impl Status { fn is_done(&self) -> bo
枚举 上一个章节学Trait的时候,用的是Ticket这个结构体的例子,Ticket只有三个状态:To-Do,InProgress和Done。 但是Ticket结构体里的status字段,或new方法里参数的类型,并不能很好的体现这一点。 #[derive(Debug, Partial
题目 定义一个SaturatingU16类型。 该类型有一个u16的值。 它支持从u16,u8,&u16,&u8转换。 它支持加法运算符重载。 确保SaturatingU16, u16, &u16和 &SaturatingU16加法达到u16::MAX时饱和。 确保