Scala中此函数的类型是什么?

bar*_*ara 0 scala

我应该指定哪种函数类型AnyRef?

case class Fun() {
  val anonFun: AnyRef = { 
    (x: Int) => x + 1
  }
}
Run Code Online (Sandbox Code Playgroud)

我的通话代码:

val f = Fun()
val result = f.anonFun(1)
Run Code Online (Sandbox Code Playgroud)

PS

正如@jarandaf所说,这个特定功能的返回类型是Function1[Int, Int].但谁可以解释我为什么不Function1[Int]呢?

jar*_*daf 5

编译器能够推断出这一点.如果你想手动指定它(例如你正在编写某种公共API),你可以使用语法糖作为函数类型:

val anonFun : Int => Int = (x: Int) => x + 1
Run Code Online (Sandbox Code Playgroud)

较短的选择是:

val anonFun : Int => Int = _ + 1
Run Code Online (Sandbox Code Playgroud)

这实际上转换为一个Function1[Int,Int]实例.

  • 函数是`FunctionN [-T1,..., - TN,+ R]`trait的实例,其中前N个类型变量是相应的函数参数类型(在这个例子中,只有一个类型为`Int`的参数) .最后一个类型变量对应于函数结果类型,在本例中,也是"Int".这解释了函数类型`Function1 [Int,Int]`. (2认同)