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)
用户未知

Answers:


120

它扩展为:

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

你要:

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

匿名函数的占位符语法用函数替换了可能的最小包含表达式。



为什么要myStrings.foreach(println(_))自动包含toStringto的参数println
凯文·梅雷迪斯

1
@Kevi Meredith println调用传递的任何对象的toString()
krookedking

1
所述匿名功能占位符语法替换为函数的最小可能含有表达。帮我我在这个问题表示怀疑:stackoverflow.com/questions/37589210/...
GA1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.