Scala underscore - ERROR: tipe parameter tidak ada untuk fungsi yang diperluas


88

Saya tahu ada beberapa pertanyaan tentang ini, tetapi saya telah membuat contoh sederhana yang menurut saya harus berfungsi, tetapi masih tidak dan saya tidak yakin saya mengerti mengapa

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))

Adakah yang bisa menjelaskan mengapa pernyataan kedua tidak dapat dikompilasi?


4
Lebih sederhana lagi:myStrings.foreach (println)
pengguna tidak diketahui

Jawaban:


120

Ini berkembang menjadi:

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

Kamu ingin:

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

Sintaks placeholder untuk fungsi anonim menggantikan ekspresi berisi sekecil mungkin dengan sebuah fungsi.



Mengapa myStrings.foreach(println(_))secara otomatis menyertakan toStringargumen ke println?
Kevin Meredith

1
@Kevi Meredith println memanggil toString () dari objek mana pun yang dilewatkan
krookedking

1
The sintaks Pengganti untuk fungsi anonim menggantikan mungkin ekspresi yang mengandung terkecil dengan fungsi. membantu saya dengan keraguan yang saya ungkapkan dalam pertanyaan ini: stackoverflow.com/questions/37589210/…
GA1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.