函数声明中的Scala元组提取

时间:2015-05-13 06:29:30

标签: scala pattern-matching

例如,给出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
}

是否有一个较短的表单来提取和标记函数中的元组项而不是这种声明方法?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

从常规的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>

用元组arg调用它:

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个args调用它:

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