scala中这是什么类型的表达?

phi*_*eas 1 functional-programming scala for-comprehension

考虑到x,p,r是从前面的表达式求出的,则在<-之后=之后发生的情况

val a = for{
 x <- y
 p = q (x)
 r <- s (p)
} yield (something(p.something, r.something))
Run Code Online (Sandbox Code Playgroud)

cch*_*tep 5

<-等效(语法糖)来.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)
  }
}
Run Code Online (Sandbox Code Playgroud)