Scala逻辑相同程序的不同输出

时间:2017-07-04 07:48:42

标签: scala

val a = List(1, 2, 3, 4, 5)
val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1)))

//b.foreach(x => println(x))

val r = b.foldLeft((0, 0)) { 
    case ((m, n), (x, y)) => {
        (m + x, n + y) 
    }
}

println(r)

程序为上述程序提供正确的输出(4,6)。但是当我取消注释上面的foreach语句时,它输出(0,0)。这里有什么问题?

1 个答案:

答案 0 :(得分:4)

val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1)))b'类型为Iterator

scala> :type b
Iterator[(Int, Int)]

所以,当您按b迭代b.foreach(x => println(x))时,此后当前迭代器b为空,因为Iterator只能迭代一次。