貶低理解
Scala 中的 for 理解只是語法糖 。這些理解是使用其主題型別的 withFilter,foreach,flatMap 和 map 方法實現的。因此,只有定義了這些方法的型別才能在 for 理解中使用。
以下形式的 for 理解,模式 pN,發電機 gN 和條件 cN:
for(p0 <- x0 if g0; p1 <- g1 if c1) { ??? }
…將使用 withFilter 和 foreach 去除巢狀呼叫:
g0.withFilter({ case p0 => c0  case _ => false }).foreach({
  case p0 => g1.withFilter({ case p1 => c1  case _ => false }).foreach({
    case p1 => ???
  })
})
而以下形式的 for / yield 表示式:
for(p0 <- g0 if c0; p1 <- g1 if c1) yield ???
…將使用 withFilter 和 flatMap 或 map 去除巢狀呼叫:
g0.withFilter({ case p0 => c0  case _ => false }).flatMap({
  case p0 => g1.withFilter({ case p1 => c1  case _ => false }).map({
    case p1 => ???
  })
})
(注意,map 用於最內層的理解,並且 flatMap 用於每個外部理解。)
for 理解可以應用於實現去糖表示所需方法的任何型別。這些方法的返回型別沒有限制,只要它們是可組合的。