Ответ 1
Ничто изначально не лениво относится к Scala для понимания; это синтаксический сахар *, который не изменит того факта, что комбинация ваших двух диапазонов будет очень интересной.
Если вы работаете с ленивыми view
ваших диапазонов, результат понимания также будет ленивым:
scala> for(i<-(0 to 10000).view; j<-(i+1 to 10000).view) yield (i,j)
res0: scala.collection.SeqView[(Int, Int),Seq[_]] = SeqViewN(...)
scala> res0.count((a: (Int, Int)) => true)
res1: Int = 50005000
Лень здесь не имеет ничего общего с понятием, но потому что, когда flatMap
или map
(см. ниже) вызывается в контейнере какого-либо типа, вы возвращаете результат в контейнер того же типа. Таким образом, осознание просто сохранит лень (или отсутствие) того, что вы вложили.
* для чего-то вроде:
(0 to 10000).flatMap(i => (i+1 to 10000).map(j => (i, j)))