有没有办法在 Scala 中解构函数的输入参数(类似于 Clojure)?
所以,而不是
scala> def f(p: (Int, Int)) = p._1
f: (p: (Int, Int))Int
我想要这个(它不起作用):
scala> def f((p1, p2): (Int, Int)) = p1
有没有办法在 Scala 中解构函数的输入参数(类似于 Clojure)?
所以,而不是
scala> def f(p: (Int, Int)) = p._1
f: (p: (Int, Int))Int
我想要这个(它不起作用):
scala> def f((p1, p2): (Int, Int)) = p1
我猜在 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 }
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)