Учитывая, что x, p, r вычисляются из предыдущих выражений, что происходит внизу, <-, а затем после = </p>
val a = for{ x <- y p = q (x) r <- s (p) } yield (something(p.something, r.something))
<- эквивалентен (синтаксический сахар) вызову .flatMap, в то время как = эквивалентен val x = (и yield вид окончательного .map).
<-
.flatMap
=
val x =
yield
.map
Так чтокод эквивалентен:
val a = y.flatMap { x => // first <- val p = q (x) s(p).map { r => // 2nd <- + yield something(p.something, r.something) } }