Scala下划线 - 错误:未指定扩展函数的参数类型

92

我知道这方面已经有很多问题了,但我创建了一个简单的示例,我认为这应该可以工作,但它仍然不起作用,我不确定我为什么不理解。

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

有人能解释一下为什么第二个语句无法编译吗?


5
更简单的写法:myStrings.foreach(println) - user unknown
1个回答

125

它扩展为:

myStrings.foreach(println(x => x.toString))
你想要的是:
myStrings.foreach(x => println(x.toString))

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


1
类似:https://dev59.com/aVfUa4cB1Zd3GeqPEyHF https://dev59.com/GW435IYBdhLWcg3wtScV - retronym
为什么 myStrings.foreach(println(_)) 自动包含 toString 作为 println 的参数? - Kevin Meredith
1
@Kevi Meredith println 调用传递的任何对象的 toString() 方法。 - krookedking
1
“_占位符语法用于匿名函数,它将最小可能的包含表达式替换为一个函数。”这个解释帮助我理解了我在这个问题中提出的疑问:https://dev59.com/Xpffa4cB1Zd3GeqP-6Zg - GA1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接