最近、scala の学習を始めましたが、アンダースコアのしくみに少し戸惑いました。ほとんどの場合、便利な匿名メソッドを提供しますが、コンパイラ (および私) を混乱させるだけの場合もあります。
例えば、
これは機能します
val randomList = List(1,2,3)
randomList.groupBy(x => x)
この
val randomList = List(1,2,3)
randomList.groupBy(_ + 1)
しかし、これではありません
val randomList = List(1,2,3)
randomList.groupBy(_)
error: missing parameter type for expanded function ((x$1) => randomList.groupBy(x$1))
randomList.groupBy(_)
いくつかの同様のケースがフォーラムで質問されています (つまり、 this one )。それらのほとんどは、これが this のような無名関数に拡張されていると述べていますx => randomList.groupBy(x)
。コンパイラが2番目のケースをコンパイルする方法を知っているのに、3番目のケースを知らない理由がわかりません。また、明示的な関数を書かずに最後のケースを解決する方法はありますか?