diff --git a/contents/appendix/derive.md b/contents/appendix/derive.md index e2a4a44a..ed5e31f7 100644 --- a/contents/appendix/derive.md +++ b/contents/appendix/derive.md @@ -1,4 +1,4 @@ -## 附录 D:派生特征 trait +## 附录 D:可派生的 trait 在本书的各个部分中,我们讨论了可应用于结构体和枚举定义的 `derive` 属性。被 `derive` 标记的对象会自动实现对应的默认特征代码,继承相应的功能。 @@ -18,7 +18,7 @@ 本附录所提供的可派生特征列表其实并不全面:库可以为其内部的特征实现 `derive` ,因此除了本文列出的标准库 `derive` 之外,还有很多很多其它库的 `derive` 。实现 `derive` 涉及到过程宏的应用,这在[宏章节](../advance/macro.md)中有介绍。 -### 用于程序员Debug输出的 `Debug` +### 用于开发者输出的 `Debug` `Debug` 特征可以让指定对象输出调试格式的字符串,通过在 `{}` 占位符中增加 `:?` 表明,例如`println!("show you some debug info: {:?}", MyObject);`. @@ -26,7 +26,7 @@ 例如,在使用 `assert_eq!` 宏时, `Debug` 特征是必须的。如果断言失败,这个宏就把给定实例的值打印出来,这样程序员就能看到两个实例为什么不相等。 -### 相等比较的 `PartialEq` 和 `Eq` +### 等值比较的 `PartialEq` 和 `Eq` `PartialEq` 特征可以比较一个类型的实例以检查是否相等,并开启了 `==` 和 `!=` 运算符的功能。 @@ -38,7 +38,7 @@ 例如,对于一个 `HashMap` 中的 key 来说, `Eq` 是必须的,这样 `HashMap` 就可以知道两个 key 是否一样。 -### `PartialOrd` 和 `Ord` 用于次序比较 +### 次序比较的 `PartialOrd` 和 `Ord` `PartialOrd` 特征可以让一个类型的多个实例实现排序功能。实现了 `PartialOrd` 的类型可以使用 `<`、 `>`、`<=` 和 `>=` 操作符。一个类型想要实现 `PartialOrd` 的前提是该类型已经实现了 `PartialEq` 。 @@ -52,7 +52,7 @@ 例如,当在 `BTreeSet`(一种基于有序值存储数据的数据结构)上存值时, `Ord` 是必须的。 -### `Clone` 和 `Copy` 用于值复制 +### 复制值的 `Clone` 和 `Copy` `Clone` 特征用于创建一个值的深拷贝(deep copy),复制过程可能包含代码的执行以及堆上数据的复制。查阅 [“通过Clone来进行深拷贝”](../core/ownership.md#通过Clone来进行深拷贝)获取有关 `Clone` 的更多信息。 @@ -68,13 +68,13 @@ 总之, `Copy` 拥有更好的性能,当浅拷贝足够的时候,就不要使用 `Clone` ,不然会导致你的代码运行更慢,对于[性能优化](../performance/intro.md)来说,一个很大的方面就是减少热点路径深拷贝的发生。 -### `Hash` 用于实现值映射内存存储 +### 固定大小的值映射的 `Hash` `Hash` 特征允许你使用 `hash` 函数把一个任意大小的实例映射到一个固定大小的值上。派生 `Hash` 实现了 `hash` 方法,对某个类型进行 `hash` 调用,其实就是对该类型下每个字段单独进行 `hash` 调用,然后把结果进行汇总,这意味着该类型下的所有的字段也必须实现了 `Hash`,这样才能够派生 `Hash`。 例如,在 `HashMap` 上存储数据,存放 key 的时候, `Hash` 是必须的。 -### `Default` 用于获取默认值 +### 默认值的 `Default` `Default` 特征会帮你创建一个类型的默认值。 派生 `Default` 意味着自动实现了 `default` 函数。 `default` 函数的派生实现调用了类型每部分的 `default` 函数,这意味着类型中所有的字段也必须实现了 `Default`,这样才能够派生 `Default` 。