let*_*aik 10 parameters scala tuples iterable-unpacking
在Haskell中你可以写:
x :: (Int,Int) -> Int
x (p,s) = p
Run Code Online (Sandbox Code Playgroud)
在Scala中你会写:
def x(a: (Int, Int)) = a._1
Run Code Online (Sandbox Code Playgroud)
要么:
def x(a: (Int, Int)) = a match {
case (p, s) => p
}
Run Code Online (Sandbox Code Playgroud)
为什么不喜欢这样的东西
def x(_: (p: Int, s: Int)) = p
Run Code Online (Sandbox Code Playgroud)
要么
def x(foo: (p @ Int, s @ Int)) = p
Run Code Online (Sandbox Code Playgroud)
?
Aar*_*rup 11
您正在寻找的功能称为解构,并且以其一般形式,将远远超出元组解包.我经常发现自己希望Scala拥有它,因为它是模式匹配语法的自然扩展:
def first((f: Int, l: Int)) = f
def displayName(Person(first, last)) = last + ", " + first
Run Code Online (Sandbox Code Playgroud)
解构是以某种形式存在于变量/值定义中的:
val (f, l) = tuple
val Person(first, last) = person
Run Code Online (Sandbox Code Playgroud)
不幸的是,围绕这些定义存在一些类型 安全 问题,我认为不太可能在不久的将来看到参数列表中的解构.