相关疑难解决方法(0)

迭代器上的Scala贴图不会产生副作用

为什么会这样,

scala> List(1,2,3,4).iterator.map((x: Int) => println(x))
Run Code Online (Sandbox Code Playgroud)

不打印出来

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

List(1,2,3,4).map((x: Int) => println(x))
List(1,2,3,4).foreach((x: Int) => println(x))
List(1,2,3,4).iterator.foreach((x: Int) => println(x))
Run Code Online (Sandbox Code Playgroud)

都这样做?

换句话说,为什么迭代器上的地图将类型T映射到单位并且副作用无法显示这些副作用?

编辑:

另外,为什么如果迭代器是惰性的,下面的lazyMap调用实际上会从头到尾计算新的迭代器(提供完整的新迭代器)?

def lazyMap[T, U](coll: Iterable[T], f: T => U) = new Iterable[U] {
  def iterator = coll.iterator map f
}

scala> lazyMap(List(1,2,3,4), (x: Int) => x + 1)
res4: java.lang.Object with Iterable[Int] = (2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)

iterator scala map

6
推荐指数
2
解决办法
2837
查看次数

标签 统计

iterator ×1

map ×1

scala ×1