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

时间:2013-05-01 21:00:45

标签: scala clojure

有没有办法在Scala中解析函数的输入参数(akin to Clojure)?

所以,而不是

scala> def f(p: (Int, Int)) = p._1
f: (p: (Int, Int))Int

我想要这个(它不起作用):

scala> def f((p1, p2): (Int, Int)) = p1

2 个答案:

答案 0 :(得分:17)

我想在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 }

答案 1 :(得分:0)

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)