In Scala, yield
can work with for-loops; for example:
val ints: IndexedSeq[Int] = for(i <- 1 to 10) yield i
But I found that yield
can not work with while-loops, e.g. like:
while (resultSet.next()) yield new Row(resultSet)
Why is Scala designed like this?
I have searched on Google and stackoverflow, but could not find an answer.
Because a while loop is a java equivalent while loop, and the 'for loop' is translated to function call of:
<IndexedSeq>.map
(if you use yield) or<IndexedSeq>.foreach
(if you don't care the result).Example Scala Code:
Compiles to (scala -Xprint:parse ForVsWhileLoop.scala):