gpt4 book ai didi

Scala奇怪的隐式装箱转换错误

转载 作者:行者123 更新时间:2023-12-04 19:33:04 26 4
gpt4 key购买 nike

有人能告诉我为什么以下内容不起作用吗?

object TestObject {
def map(f: (Double, Double) => Double, x2: Array[Double]) = {
val y = x2.zip( x2 )
val z = y.map(f)
z
}
}

产生这个错误:

type mismatch; found : (Double, Double) => Double required: ((Double, Double)) => ?

最佳答案

在此代码段中,f 是一个函数,它接受两个 Double 参数并返回一个 Double。您正在尝试通过传递类型为 Tuple2[Double,Double] 的单个参数来调用 f。您可以首先通过更改 f 的类型来解决此问题:

object TestObject {
def map(f: ((Double, Double)) => Double, x2: Array[Double]) = {
val y = x2.zip( x2 )
val z = y.map(f)
z
}
}

您也可以将其声明为 f: Tuple2[Double, Double] => Double 以便更清楚(这是完全等效的)。

相反,您可以这样更改调用:

object TestObject {
def map(f: (Double, Double) => Double, x2: Array[Double]) = {
val y = x2.zip( x2 )
val z = y.map(f.tupled)
z
}
}

tupled 自动将您的 (Double, Double) => Double 函数转换为 Tuple2[Double, Double] => Double 函数。但请记住,转换将在每次调用 TestObject.map

时完成

关于Scala奇怪的隐式装箱转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com