ขีดล่าง 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))

ใครสามารถอธิบายได้ว่าทำไมคำสั่งที่สองไม่รวบรวม?


4
ง่ายกว่า:myStrings.foreach (println)
ผู้ใช้ไม่ทราบ

คำตอบ:


120

ขยายเป็น:

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

คุณต้องการ:

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

ไวยากรณ์ตัวยึดตำแหน่งสำหรับฟังก์ชันที่ไม่ระบุชื่อจะแทนที่นิพจน์ที่มีขนาดเล็กที่สุดที่เป็นไปได้ด้วยฟังก์ชัน



ทำไมไม่myStrings.foreach(println(_))รวมโดยอัตโนมัติtoStringสำหรับการโต้แย้งเพื่อprintln?
Kevin Meredith

1
@Kevi Meredith println เรียก toString () ของวัตถุใดก็ตามที่ส่งผ่าน
krookedking

1
ไวยากรณ์ตัวยึดสำหรับฟังก์ชั่นที่ไม่ระบุชื่อแทนที่การแสดงออกที่มีขนาดเล็กที่สุดที่เป็นไปได้ด้วยฟังก์ชั่น ช่วยฉันด้วยข้อสงสัยที่ฉันแสดงในคำถามนี้: stackoverflow.com/questions/37589210/…
GA1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.