Scalaのfor内包表記でコンパイルエラーになる例
より
これは動作するが、
code:scala
scala> var option = Option(List(1,2,3,4,5))
option: Option[ListInt] = Some(List(1, 2, 3, 4, 5)) scala> for (list <- option; num <- list) println(num)
1
2
3
4
5
内包表記にするとエラーになる。
code:scala
scala> for (list <- option; num <- list) yield num
<console>:13: error: type mismatch;
for (list <- option; num <- list) yield num
^
これはfor式が展開される式がyieldの有無によって異なるため。
前者はforeachのループとして展開される。
後者はflatMap/mapに展開される。
OptionやListなど型によって要求する無名関数のシグネチャが異なり、コンパイルエラーになる場合がある。