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时饱和。 确保
The Drop trait 在学析构函数的时候,提到了drop函数: 回收类型占用的内存(即std::mem::size_of bytes) 清理值可能正在管理的任何其他资源(比如String的堆缓冲区) 第二点是Drop trait的用武之地 pub trait Drop { fn
复制值(第二部分) 与上一节的例子一样,但是有点不同,使用u32而不是String作为类型。 fn consumer(s: u32) { /* */ } fn example() { let s: u32 = 5; consumer(s); let t = s + 1