一旦我们想要做“票务管理”,我们就需要考虑一种存储多张tickets的方法。反过来,这意味着我们需要考虑集合的问题,特别是同质集合:我们希望存储多个相同类型的实例。 在这方面,Rust能提供什么呢? Arrays 首先可以尝试使用数组,Rust中的数组是相同类型元素的固定大小的集合。
Ticket管理系统——引言 在前一章中,我们孤立地建模了 Ticket:定义了它的字段及其约束,学习了如何在 Rust 中最好地表示这些字段,但并未考虑 Ticket 如何融入更大的系统。本章我们将围绕 Ticket 构建一个简单的流程,引入一个(基础的)管理系统来存储和获取tick
总结 谈到domain modelling(领域建模)时,细节决定成败。 Rust 提供了丰富的工具,可以帮助我们将领域中的约束直接表达在类型系统中,但要想掌握并写出符合惯例的代码,仍需一些实践和经验积累。 让我们以对Ticket模型的最后改进来结束本章。 我们将为Ticket中的每个
Error::source 为了完成对Error trait的学习,我们还需要学习一个东西:source方法。 // Full definition this time! pub trait Error: Debug + Display { fn source(&sel
TryFrom和TryInto 上一个章节我们学到了From trait和Into trait,这是Rust的用于无误类型转换的惯用接口。 但是,如果不能保证转换一定成功该怎么办呢? 现在我们对错误有了足够的了解,可以讨论From和Into能够进行错误处理的版本:TryF
thiserror 前面讲的那几节专门为了thiserror铺垫显得有点绕道,不是吗?但这是必要的! 让我们重回正轨:自定义错误类型和thiserror。 自定义错误类型 之前已经学过了如何为自定义错误类型“手动”实现Error trait。 试想一下,我们
Dependencies(依赖) 一个Package可以依赖其他Package,通过把那些被依赖的Package放在Cargo.toml文件下的[dependencies]部分。 指定依赖项的最常见的方式是提供其名称和版本: [dependencies] thiserro
Libraries and binaries(库和二进制文件) 上一节的练习,为TicketNewError实现Errortrait写了很多代码,手动实现Display,还有Error实现块。 我们可以使用thiserror删除一些boilerplate(样板代码,在编程
Error reporting(错误报告) 在上一个练习中,我们必须解构TitleError变体以提取错误消息并将其传递给panic!宏。 这是错误报告的一个(基本)示例:将错误类型转换为可以向用户、开发者等显式的表示形式。 对于每个Rust开发人员来说,想
Error enums(错误枚举) 神人RustRover,你自己也知道你的代码逆天。上一节的代码给我整不会了,你怎么直接用字符串硬编码匹配错误呢? 不过RustRover自己也知道上一节代码不行,这一节就要做出一些改善了。 在团队协作时,同事可能会重新处理