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))
我有如下的 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))