私は Scala を学んでおり、99 個の Scala の問題に取り組んでいます。次の演習の場合:
ネストされたリスト構造をフラット化します。例:
scala> flatten(List(List(1, 1), 2, List(3, List(5, 8))))
res0: List[Any] = List(1, 1, 2, 3, 5, 8)
解は次のように与えられます。
def flatten(ls: List[Any]): List[Any] = ls flatMap {
case ms: List[_] => flatten(ms)
case elements => List(elements)
}
しかし、なぜ次のことがうまくいかないのだろうと思っていましたか?
def flatten[A](ls: List[List[A]]): List[A] = ls flatMap {
case ms: List[_] => flatten(ms)
case elements => List(elements)
}
IntelJ IDEA は、「そのような署名では参照のフラット化を解決できません」と言って、問題がその部分flatten(ms)
にあることを教えてくれます。List
flatten
2番目のコードが機能しない理由はありますか?