1
Array("hi","there").map(println)
Array("hi","there").map(s => println(s))
Array("hi","there").map(println(_))
上記のステートメントのそれぞれは、mapの最初の2つの引数で同じ出力が得られますが、最後のものは関数の呼び出しです。スカラ:mapへの引数は、関数OR呼び出しです。
どのようにマップ両方を扱うことができますか?
署名TraversableLikeクラスのマップの
は、このようなものです:def map[B, That](f: scala.Function1[A, B])(implicit bf: scala.collection.generic.CanBuildFrom[Repr, B, That]) : That = { /* compiled code */ }
私はちょうど第一と第三ケースの両方が第二1に変換されていることを追加し、しかしでしまいます異なるメカニズム。 (println(_) 'と' s => println(s))は文字通り同じものですが、前者は後者の短い形式です)。 'def foo = println'の型は'(String)=> Unit'ではなく 'Unit'であるため、コンパイラは最初の例をマップの定義に適合させることができません。一方、 'def foo = println(_)'は '(String)=> Unit'型であるため、2回目と3回目の作業はそのままです。 – slouc
@slouc答えに追加! –