Scalaアンダースコア-エラー:拡張関数のパラメータータイプがありません


88

これについてはかなりの数の質問があることは知っていますが、うまくいくはずだと思った簡単な例を作成しましたが、それでもうまくいかず、理由がわかりません

val myStrings = new Array[String](3)
// do some string initialization

// this works
myStrings.foreach(println(_))


// ERROR: missing parameter type for expanded function
myStrings.foreach(println(_.toString))

2番目のステートメントがコンパイルされない理由を誰かが説明できますか?


4
さらに簡単:myStrings.foreach (println)
ユーザー不明

回答:


120

次のように展開されます。

myStrings.foreach(println(x => x.toString))

あなたが欲しい:

myStrings.foreach(x => println(x.toString))

無名関数のプレースホルダー構文は、可能な限り最小の包含式を関数に置き換えます。



の引数にmyStrings.foreach(println(_))自動的に含めるのはなぜですか?toStringprintln
ケビンメレディス

1
@Kevi Meredith printlnは、渡されたオブジェクトのtoString()を呼び出します
krookedking 2014

1
匿名関数のプレースホルダの構文は、機能と可能な限り最小含む式を置き換えます。:私はこの質問で表現疑問で私を助けstackoverflow.com/questions/37589210/...
GA1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.