Scala中是否提供了分解输入参数?

Scala中是否提供了分解输入参数?,scala,clojure,Scala,Clojure,有没有办法在Scala()中分解函数的输入参数 因此,与其 scala> def f(p: (Int, Int)) = p._1 f: (p: (Int, Int))Int 我想要这个(它不工作): 我想在scala中,您可以使用模式匹配来实现同样的效果,例如: val f: (Int, Int) => Int = { case (p1, p2) => p1 } 或者,相当于: def f(p: (Int, Int)) = p match { case(p1, p2) =&

有没有办法在Scala()中分解函数的输入参数

因此,与其

scala> def f(p: (Int, Int)) = p._1
f: (p: (Int, Int))Int
我想要这个(它不工作):


我想在scala中,您可以使用模式匹配来实现同样的效果,例如:

val f: (Int, Int) => Int = { case (p1, p2) => p1 }
或者,相当于:

def f(p: (Int, Int)) = p match { case(p1, p2) => p1 }
如果可以推断类型,则可以删除
(Int,Int)=>Int

List((1, 2), (3, 4)) map { case (p1, p2) => p1 }

我宁愿避免使用模式匹配作为过于冗长的解决方案。不过,如果没有其他惯用的方法,我可以接受。有吗?@JacekLaskowski-这是你能得到的最好的了。元组和方法参数没有完全统一,这是您注意到的地方之一。但是,您可以使用
def(p1:Int,p2:Int)=p1+p2
,然后使用
(f)。tuple
创建一个函数,该函数采用一个元组,即使
def
采用了单独的参数。在Scala的问题跟踪器中请求相同的参数:
List((1, 2), (3, 4)) map { case (p1, p2) => p1 }
def f(p: ((Int, Int), (Int, Int))) = p._1     > f: (p: ((Int, Int), (Int, Int)))(Int, Int)
f((1,2), (3,4))                               > res1: (Int, Int) = (1,2)