@ -27,7 +27,7 @@ vector 的`iter`方法允许从 vector 创建一个**迭代器**( *iterator*)
1. 从 vector 中创建了一个迭代器。
2. 使用`map`适配器和一个闭包参数对每一个元素加一。
3. 使用`collect`适配器来消费迭代去 并生成了一个新的 vector。
3. 使用`collect`适配器来消费迭代器 并生成了一个新的 vector。
这就是如何产生结果`[2, 3, 4]`的。如你所见,闭包是使用迭代器的很重要的一部分:他们提供了一个自定义类似`map`这样的迭代器适配器的行为的方法。
@ -52,7 +52,7 @@ nothing unless consumed, #[warn(unused_must_use)] on by default
| ^^^^^^^^^^^^^^^^^^^^^^^^^
```
这个警告是因为迭代器适配器实际上并不自己进行处理。他们需要一些其他方法来触发迭代器链的计算。我们称之为**消费迭代 器**( *consuming adaptors*),而`collect`就是其中之一。
这个警告是因为迭代器适配器实际上并不自己进行处理。他们需要一些其他方法来触发迭代器链的计算。我们称之为**消费适配 器**( *consuming adaptors*),而`collect`就是其中之一。
那么如何知道迭代器方法是否消费了迭代器呢?还有哪些适配器是可用的呢?为此,让我们看看`Iterator` trait。
@ -68,7 +68,7 @@ trait Iterator {
}
```
这里有一些还未讲到的新语法:`type Item`和`Self::Item`定义了这个 trait 的**关联类型**( *associated type*),第XX 章会讲到关联类型。现在所有你需要知道就是这些代码表示`Iterator` trait 要求你也定义一个`Item`类型,而这个`Item`类型用作`next`方法的返回值。换句话说,`Item`类型将是迭代器返回的元素的类型。
这里有一些还未讲到的新语法:`type Item`和`Self::Item`定义了这个 trait 的**关联类型**( *associated type*),第19 章会讲到关联类型。现在所有你需要知道就是这些代码表示`Iterator` trait 要求你也定义一个`Item`类型,而这个`Item`类型用作`next`方法的返回值。换句话说,`Item`类型将是迭代器返回的元素的类型。
让我们使用`Iterator` trait 来创建一个从一数到五的迭代器`Counter`。首先,需要创建一个结构体来存放迭代器的当前状态,它有一个`u32`的字段`count`。我们也定义了一个`new`方法,当然这并不是必须的。因为我们希望`Counter`能从一数到五,所以它总是从零开始: