我定义了一个像
这样的函数foodef foo(f : (Int, Int) => Int) = f(1,2) // just calling with some default vals
并可以像
一样调用它foo(_+_)
但是当我尝试使用相同的方式来调用以IntPair(自定义类型)作为参数的函数时,我收到错误
error: wrong number of parameters; expected = 1
调用它的正确语法是什么
示例代码
type IntPair = (Int, Int)
def sum(f: (IntPair) => Int): (IntPair) => IntPair = {
def iter(pair: IntPair): IntPair = {
val n = readLine()
print(s"$n+")
if (n != "q") {
val (total, accum) = pair
val p: IntPair = (f(n.toInt, total), accum + 1)
iter(p)
} else {
pair
}
}
iter
}
我可以像
一样调用val f = sum((p : IntPair) => p._1 + p._2) // i want to use here _ syntax
f((0,0))
但不喜欢
val f = sum((_._1 + _._2)) //gives error
答案 0 :(得分:1)
scala> def sum(p: ((Int, Int)) => Int) = p((2, 3))
sum: (p: ((Int, Int)) => Int)Int
scala> sum(Function.tupled(_+_))
res4: Int = 5
在Scala中,参数列表和元组不统一,因此您不能简单地将元组传递给需要多个参数的函数。
sum(_._1 + _._2)
表示sum((x,y) => x._1 + y._2)
btw,因此错误。