2016-05-25 7 views
2

私は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番目のコードが機能しない理由はありますか?

答えて

0

アンラッピングの最後のステップが失敗するため、 List(elements)flattenの2番目のバージョンはListListを入力する必要があります。

1

他の人が別の質問をしましたが、同じ例を使用しています。

私は各ステップを打破し、それhere

+0

はい、他の誰かが私だっ説明します!私はあなたの素晴らしい詳細な有益な答えを受け入れました。ありがとうございました。しかし、私はこれが異なっていると感じ、その返答で説明しなかった(私はそこに説明されるように頼んでいない)。ここで私は[A]を使用して、なぜこれがint型かchar型かを問わないと言うことを尋ねています。 99個のスカラ問題の最初の10個すべての質問で[A]構文が使われています。自分自身をテストすると、この例では[A]を使用して自分自身を止めるのが難しいと感じています。しかし、なぜそれが間違っていたのか分かっていれば、[A] –

関連する問題