函数声明中的 Scala 元组提取

Scala tuple extraction in function declaration

例如 Tuple2 形式

type Duple = (String,Int)

此函数在参数中提取和标记 duple 的项目时出错,

def f( (s,n): Duple ): String = s*n

但是这行得通,

def f( d: Duple ): String = {
  val (s,n) = d
  s*n
}

是否有比这种声明式方法更短的形式来提取和标记函数中的元组项?

def f(d: Duple): String = d._1 * d._2

def f(d: Duple): String = d match { case (x, y) => x * y }

从常规的 2 arg 函数开始:

scala> val f: (String, Int) => String = (a, b) => a * b
f: (String, Int) => String = <function2>

将其转换为接受元组的单个 arg 函数:

scala> val tf = f tupled
tf: ((String, Int)) => String = <function1>

用元组参数调用它:

scala> tf("a" -> 2)
res0: String = aa

或者如果你走相反的方向:

从一个接受元组的函数开始:

scala> tf
res2: ((String, Int)) => String = <function1>

将其转换为接受 2 个参数的函数:

scala> val uf = Function.untupled(tf)
uf: (String, Int) => String = <function2>

用 2 个参数调用它:

scala> uf("b", 3)
res3: String = bbb