Нет ничего ленивого в понимании Скалы;это синтаксический сахар *, который не изменит тот факт, что комбинация ваших двух диапазонов будет нетерпеливой.
Если вы работаете с ленивыми 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)))