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

标签 scala

我定义了一个函数foo like

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

最佳答案

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) 顺便说一句,因此错误.

关于Scala 正确的语法在带有元组的函数文字中使用下划线 ("_"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449757/

相关文章:

scala - 真值和假值

scala - 如何在 Spark 2.0 中使用用户定义类型?

python - 使用什么命令来检查 scala REPL 中的实例?

Scala - 元组和部分应用函数

scala - Lang 和 requestLang 中的值不明确

Scala将可变参数传递给另一个接受可变参数的函数

file - 在scala中逐行比较两个文件

scala - 当两个 promise 完成时触发行动

java - 将时间转换为UTC时间是相反的方式

scala - reduceLeft可以并行执行吗?