2017-07-04 17 views
1
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)になります。ここで何が間違っていますか?論理的に同じプログラムの異なった出力をスカラー

答えて

4

val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1)))は、bのタイプはIteratorです:

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

Iteratorは一度だけ繰り返すことができるので、あなたは、現在のイテレータbが空であるこの後、b.foreach(x => println(x))によってbを繰り返してきたのでとき。

関連する問題