pull/132/head
lcofjp 7 years ago
parent d3c7c598cb
commit 2a7fe8d448

@ -115,7 +115,7 @@ impl Summarizable for WeatherForecast {
另外这段代码假设 `Summarizable` 是一个公有 trait这是因为示例 10-12 中 `trait` 之前使用了 `pub` 关键字。
trait 实现的一个需要注意的限制是:只能在 trait 或对应类型位于我们 crate 本地的时候为其实现 trait。换句话说不允许对外部类型实现外部 trait。例如不能在 `Vec` 上实现 `Display` trait因为 `Display``Vec` 都定义于标准库中。允许在像 `Tweet` 这样作为我们 `aggregator`crate 部分功能的自定义类型上实现标准库中的 trait `Display`。也允许在 `aggregator`crate 中为 `Vec` 实现 `Summarizable`,因为 `Summarizable` 定义于此。这个限制是我们称为 **孤儿规则***orphan rule*)的一部分,如果你感兴趣的可以在类型理论中找到它。简单来说,它被称为 orphan rule 是因为其父类型不存在。没有这条规则的话,两个 crate 可以分别对相同类型实现相同的 trait因而这两个实现会相互冲突Rust 将无从得知应该使用哪一个。因为 Rust 强制执行 orphan rule其他人编写的代码不会破坏你代码反之亦是如此。
trait 实现的一个需要注意的限制是:只能在 trait 或对应类型位于我们 crate 本地的时候为其实现 trait。换句话说不允许对外部类型实现外部 trait。例如不能在 `Vec` 上实现 `Display` trait因为 `Display``Vec` 都定义于标准库中。允许在像 `Tweet` 这样作为我们 `aggregator`crate 部分功能的自定义类型上实现标准库中的 trait `Display`。也允许在 `aggregator`crate 中为 `Vec` 实现 `Summarizable`,因为 `Summarizable` 定义于此。这个限制是我们称为 **孤儿规则***orphan rule*)的一部分,如果你感兴趣的可以在类型理论中找到它。简单来说,它被称为 orphan rule 是因为其父类型不存在。没有这条规则的话,两个 crate 可以分别对相同类型实现相同的 trait因而这两个实现会相互冲突Rust 将无从得知应该使用哪一个。因为 Rust 强制执行 orphan rule其他人编写的代码不会破坏你代码反之亦是如此。
### 默认实现

@ -97,7 +97,7 @@ looking arrows and labels? /Carol -->
这里 `x` 拥有生命周期 `'b`,比 `'a` 要大。这就意味着 `r` 可以引用 `x`Rust 知道 `r` 中的引用在 `x` 有效的时候也总是有效的。
现在我们已经在一个具体的例子中展示了引用的声明周期位于何处,并讨论了 Rust 如何分析生命周期来保证引用总是有效的,接下来让我们聊聊在函数的上下文中参数和返回值的泛型生命周期。
现在我们已经在一个具体的例子中展示了引用的生命周期位于何处,并讨论了 Rust 如何分析生命周期来保证引用总是有效的,接下来让我们聊聊在函数的上下文中参数和返回值的泛型生命周期。
### 函数中的泛型生命周期

Loading…
Cancel
Save