在Scala中的参数列表中是否会直接支持元组解包?

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)

不幸的是,围绕这些定义存在一些类型 安全 问题,我认为不太可能在不久的将来看到参数列表中的解构.