Scala 编译器找不到正确的泛型函数参数

the scala compiler cannot find the correct generic function parameter

我有如下的 Scala 代码

object Main extends App {
   def getFun[T, U](x: Array[T] => U, p: Array[T]): U = { x(p) }
   def getFun2(x: Array[Int] => Double, p: Array[Int]): Double = { x(p) }

   val arr = Array(1, 2, 3, 4)
   println(getFun((x: Array[Int]) => x.sum, arr))
   // println(getFun(_.sum, arr))  // error, why!
   // println(getFun(x = _.sum, arr))  // error, why!
   println(getFun2(_.sum.toDouble, p = arr))
}

为什么getFun不能像getFun2那样简单使用。 我认为使用 "x = _.sum",scala 编译器可以找到正确的类型,但似乎失败了。

任何人都可以解释错误的原因。
谢谢!

getFun 使用类型变量,而 getFun2 使用显式类型。

因此,对于 getFun2,编译器知道它正在对 Array[Int] 调用 sum 函数。它知道如何总结整数,一切正常。

对于getFun编译器只知道有一个something的数组(T代表some type).它没有如何总结something,我们必须在这里帮助编译器并告诉它T是什么。一种可能性是您在第一行所做的,在函数 lambda 中指定数组类型。另一种方法是像这样传递类型参数值:

println(getFun[Int,Double](_.sum, arr))