更新关联函数的内容

pull/563/head
sunface 3 years ago
parent 0cfb5b5731
commit b55337eccb

@ -162,6 +162,7 @@
- [还可以的单向链表](too-many-lists/ok-stack/intro.md)
- [优化类型定义](too-many-lists/ok-stack/type-optimizing.md)
- [定义 Peek 函数](too-many-lists/ok-stack/peek.md)
- [IntoIter、Iter 和 IterMut](too-many-lists/iter.md)
- [易混淆概念解析](confonding/intro.md)
- [切片和切片引用](confonding/slice.md)

@ -20,7 +20,7 @@ pub trait Iterator {
同时,`next` 方法也返回了一个 `Item` 类型,不过使用 `Option` 枚举进行了包裹,假如迭代器中的值是 `i32` 类型,那么调用 `next` 方法就将获取一个 `Option<i32>` 的值。
还记得 `Self` 吧?在之前的章节[提到过](https://course.rs/basic/trait/trait-object#self与self) `Self` 用来指代当前的特征实例,那么 `Self::Item` 就用来指代特征实例中具体的 `Item` 类型
还记得 `Self` 吧?在之前的章节[提到过](https://course.rs/basic/trait/trait-object#self-与-self) **`Self` 用来指代当前调用者的具体类型,那么 `Self::Item` 就用来指代该类型实现中定义的 `Item` 类型**
```rust
impl Iterator for Counter {
@ -30,9 +30,14 @@ impl Iterator for Counter {
// --snip--
}
}
fn main() {
let c = Counter{..}
c.next()
}
```
在上述代码中,我们为 `Counter` 类型实现了 `Iterator` 特征,那么 `Self` 就是当前的 `Iterator` 特征对象, `Item` 就是 `u32` 类型。
在上述代码中,我们为 `Counter` 类型实现了 `Iterator` 特征,变量 `c` 是特征 `Iterator` 的实例,也是 `next` 方法的调用者。 结合之前的黑体内容可以得出:对于 `next` 方法而言,`Self` 是调用者 `c` 的具体类型: `Counter`,而 `Self::Item``Counter` 中定义的 `Item` 类型: `u32`
聪明的读者之所以聪明,是因为你们喜欢联想和举一反三,同时你们也喜欢提问:为何不用泛型,例如如下代码:

@ -0,0 +1 @@
# IntoIter、Iter 和 IterMut

@ -1,6 +1,10 @@
# ChangeLog
记录一些值得注意的变更。
## 2022-03-13
- 优化[进一步深入特赠 - 关联类型](https://course.rs/basic/trait/advance-trait.html#关联类型)中的部分内容,感谢 AllenYu0018 的[提示](https://github.com/sunface/rust-course/discussions/392).
## 2022-03-11
- 新增章节: [还 OK 的单向链表 - Peek 函数](https://course.rs/too-many-lists/ok-stack/peek.html)

Loading…
Cancel
Save