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

时间:2015-03-20 06:07:32

标签: scala functional-programming iterator

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

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

1 个答案:

答案 0 :(得分:2)

方法Iterator.map返回新的Iterator对象而不遍历它:

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

在迭代textIt时执行upperIt的迭代。