2017-07-04 10 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) 

Das Programm gibt korrekte Ausgabe (4, 6) für das obige Programm. Aber wenn ich die foreach-Anweisung oben auskommentiere, gibt es (0, 0) aus. Was ist hier falsch?Scala verschiedene Ausgänge von logisch gleichen Programmen

Antwort

4

val b = a.grouped(2).filter(_.length == 2).map(x => (x(0), x(1))), b ‚s Art ist Iterator:

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

so, wenn Sie b von b.foreach(x => println(x)) iteriert haben, nachdem dieser die aktuelle Iterator b leer ist, Da Iterator kann nur einmal wiederholt werden.

Verwandte Themen