为什么在迭代器上执行映射不会导致它被修改?

Why does performing a map on an iterator not cause it to be modified?

> val textIt = text.split("\s").iterator
> val upperIt = textIt.map(_.toUpperCase)
> textIt
res14: Iterator[String] = non-empty iterator

为什么textIt不是空的?由于 map 迭代它们,我希望它成为一个空迭代器。引擎盖下到底发生了什么?

方法Iterator.mapreturns新建Iterator对象而不遍历它:

def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] {
  def hasNext = self.hasNext
  def next() = f(self.next())
}

在迭代 upperIt 时执行迭代 textIt