在 Haskell 中你可以这样写:
x :: (Int,Int) -> Int
x (p,s) = p
在 Scala 中你可以这样写:
def x(a: (Int, Int)) = a._1
or:
def x(a: (Int, Int)) = a match {
case (p, s) => p
}
为什么不拥有类似的东西
def x(_: (p: Int, s: Int)) = p
or
def x(foo: (p @ Int, s @ Int)) = p
?
您正在寻找的功能称为解构而且,就其一般形式而言,它远远超出了元组拆包的范围。我经常发现自己希望 Scala 拥有它,因为它是模式匹配语法的自然扩展:
def first((f: Int, l: Int)) = f
def displayName(Person(first, last)) = last + ", " + first
解构is(某种程度上)以变量/值定义的形式存在:
val (f, l) = tuple
val Person(first, last) = person
不幸的是,有一些type http://www.scala-lang.org/node/8344 safety https://issues.scala-lang.org/browse/SI-140 issues https://issues.scala-lang.org/browse/SI-4670围绕这样的定义,我认为您不太可能很快在参数列表中看到解构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)