Scala正确的语法在函数文字中使用下划线(" _")和元组

时间:2014-05-03 20:57:10

标签: scala

我定义了一个像

这样的函数foo
def 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

1 个答案:

答案 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,因此错误。