次のコードがあるとします。
object ForComprehension {
def generateSomeSeq(n: Int): List[Int] = (1 to n).toList
def square(n: Int): List[Int] =
for (x <- generateSomeSeq(n)) yield x * x
}
それはすべてうまくいきます。しかし、何らかの理由で、最初のメソッドの結果を次のSet
代わりに変更しList
ます。
object ForComprehension {
def generateSomeSeq(n: Int): Set[Int] = (1 to n).toSet
def square(n: Int): List[Int] =
for (x <- generateSomeSeq(n)) yield x * x
}
Scalaコンパイラーは、理解のための最初のジェネレーターに型の不一致があると文句を言います。それは理にかなっていますが、どちらの場合でも機能することを期待しています。結局のところ、のList
代わりにを期待していることを理解するための視覚的な手がかりはありませんSet
。タイプの不一致エラーを診断するには、両方の署名を読み取る必要があります。
それとも、そもそも理解のためにそのような構文上の局所性を期待するべきではありませんか?