2015-05-13 171 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 }