IntoIterator

The Iterator trait tells you how to iterate once you have created an iterator. The related trait IntoIterator defines how to create an iterator for a type. It is used automatically by the for loop.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.

Click through to the docs for IntoIterator. Every implementation of IntoIterator must declare two types:

  • Item: the type to iterate over, such as i8,
  • “IntoIter”:“into_iter”方法返回的“Iterator”类型。

Note that IntoIter and Item are linked: the iterator must have the same Item type, which means that it returns Option<Item>

此示例对 x 坐标和 y 坐标的所有组合进行了迭代。

请尝试在 main 中对网格进行两次迭代。为什么会失败?请注意,IntoIterator::into_iter 获得了 self 的所有权。

如要解决此问题,请为 &Grid 实现 IntoIterator,并在 GridIter 中存储对 Grid 的引用。

对于标准库类型,可能会出现同样的问题:for e in some_vector 将获得 some_vector 的所有权,并迭代该矢量中的自有元素。请改用 for e in &some_vector 来迭代 some_vector 的元素的引用。