Scala:在函数参数中分解元组
在Python中,我可以这样做:
def f((a, b)): return a + b d = (1, 2) f(d)  这里传入的元组在被传递给f被分解。 
现在在斯卡拉我现在正在这样做:
 def f(ab:(Int, Int)) : Int = { val (a, b) = ab a + b } val d = (1, 2) f(d) 
有什么我可以在这里做的,以便分解发生在parameter passing? 只是好奇。
谢谢。
您可以创build一个函数,并将其input与模式匹配相匹配:
 scala> val f: ((Int, Int)) => Int = { case (a,b) => a+b } f: ((Int, Int)) => Int scala> f(1, 2) res0: Int = 3 
 或者将方法的input与match关键字match : 
 scala> def f(ab: (Int, Int)): Int = ab match { case (a,b) => a+b } f: (ab: (Int, Int))Int scala> f(1, 2) res1: Int = 3 
另一种方法是使用一个带有两个参数的函数,并“元组”
 scala> val f: (Int, Int) => Int = _+_ f: (Int, Int) => Int = <function2> scala> val g = f.tupled // or Function.tupled(f) g: ((Int, Int)) => Int = <function1> scala> g(1, 2) res10: Int = 3 // or with a method scala> def f(a: Int, b: Int): Int = a+b f: (a: Int, b: Int)Int scala> val g = (f _).tupled // or Function.tupled(f _) g: ((Int, Int)) => Int = <function1> scala> g(1, 2) res11: Int = 3 // or inlined scala> val f: ((Int,Int)) => Int = Function.tupled(_+_) f: ((Int, Int)) => Int = <function1> scala> f(1, 2) res12: Int = 3 
怎么样:
  ab._1 + ab._2 
_1,_2等访问元组的不同元素。
 object RandomExperiments extends App{ def takeTuple(t:(Int,Int))=print (s"$t ${t._1}\n") takeTuple(1,3) takeTuple((1,3)) takeTuple(((1,3))) } 
打印:
 (1,3) 1 (1,3) 1 (1,3) 1