匿名函数的Scala占位符语法

时间:2018-02-13 11:16:22

标签: scala

我有一个类型为Array

的val numSeq
scala> val numSeq=Array(3.1415,2.71828,9.8)
numSeq: Array[Double] = Array(3.1415, 2.71828, 9.8)

现在想要将numSeq内的每个元素转换为Int并使用占位符语法将其打印出来。毫无疑问,以下失败:

scala> numSeq foreach (println (_.toInt))
<console>:13: error: missing parameter type for expanded function ((x$1: <error>) => x$1.toInt)
   numSeq foreach (println (_.toInt))

但令我惊讶的是以下陈述是有道理的:

scala> numSeq foreach (Console println _.toInt)
3
2
9

但为什么它好了,只添加了前缀Console

1 个答案:

答案 0 :(得分:3)

这是因为词汇范围以及他们如何被scalac识别出来:

  • _.toInt是一个功能
  • println(_.toInt):您想打印一个函数,输入类型未解析
  • Console.println(_.toInt):同样,打印功能
  • Console println _.toInt实际上与:(x => Console println x.toInt)
  • 相同