0
我想知道在for-yield塊的scala中的控制流程。我發現所有元素都先經過'for'部分,然後是'yield'部分。這是爲什麼?如果它不能成爲收益的部件1,對於產量爲element2的...Scala for-yield控制流程
scala> val list = List(1,2,3,4,5,6)
list: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> :paste
// Entering paste mode (ctrl-D to finish)
val t = for {
i <- list
log = println("processing " + i)
} yield {
println("In yield for " + i)
i
}
// Exiting paste mode, now interpreting.
processing 1 //All of them first go through the for block
processing 2
processing 3
processing 4
processing 5
processing 6
In yield for 1 // yield comes after all
In yield for 2
In yield for 3
In yield for 4
In yield for 5
In yield for 6
t: List[Int] = List(1, 2, 3, 4, 5, 6)
這取決於您在「for」中的第一件事。 試試'Stream'而不是'List' – Dima
你能說說這個評論嗎?試過流,它只是處理第一個元素。爲什麼列表行爲這種特殊的方式是我想知道的。 – Richeek
「列表表現出這種特殊的方式」,因爲這就是它的實現方式。 '流'是以不同的方式實現的。要將'.toList'添加到剪切末尾,「剛剛處理第一個元素」 – Dima