私はScalaを学び、99 Scalaの問題を経験しています。次の演習の場合:scala flatMapフラットネストされたリスト
ネストされたリスト構造を平坦化します。 例:
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)
}
IntellJのIDEAは、問題がflatten(ms)
一部である私に告げる「参照は、そのような署名で平らに解決できない」と言っやflatten
ためList
クラスのドキュメントには、それは注意してください「と言う:コンパイラができない可能性があります型パラメータを推論する "。
2番目のコードが機能しない理由はありますか?
はい、他の誰かが私だっ説明します!私はあなたの素晴らしい詳細な有益な答えを受け入れました。ありがとうございました。しかし、私はこれが異なっていると感じ、その返答で説明しなかった(私はそこに説明されるように頼んでいない)。ここで私は[A]を使用して、なぜこれがint型かchar型かを問わないと言うことを尋ねています。 99個のスカラ問題の最初の10個すべての質問で[A]構文が使われています。自分自身をテストすると、この例では[A]を使用して自分自身を止めるのが難しいと感じています。しかし、なぜそれが間違っていたのか分かっていれば、[A] –