2015-05-13 204 views
2

鉴于实例Tuple2形式斯卡拉元组提取

type Duple = (String,Int) 

此功能犯错提取并在参数标注二倍的项目,

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

但是这个作品,

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

是否有一个简短的形式来提取和标记元组的项目一个函数比这个声明式的方法?

回答

2

开始用常规的2 ARG功能:

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

其转换成接受的元组单ARG功能:

scala> tf("a" -> 2) 
res0: String = aa 
:有一个元组ARG

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

调用它

或者如果你去反对方向E:,需要一个元组

开始与功能:

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

将其转换为函数,采用2个ARGS:

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

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

2个ARGS调用它

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

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