值声明中的 Scala 列表模式匹配

Scala list pattern matching in value declaration

假设以下四个元组列表:

> def getList = List( (1,2), (3,4), (5,6), (7,8) )

我想像这样在新值声明中将它解析为三个部分 - 最后一个元组 (l1,l2), 倒数第二个元组 (p1,p2) 列表的其余部分 rest

此外,我还想对元组进行模式匹配。示例:

> val (rest :: (p1, p2) :: (l1, l2) ) = getList
rest = List( (1,2), (3,4) )
p1 = 5
p2 = 6
l1 = 7
l2 = 8

预期的输出不起作用,因为 :: 需要一个列表作为其右侧参数。我尝试了几种不同的可能性,例如 :::List 包装器。然而,我并没有达到目的。

这可能吗?我不想反转列表 - 相反,我正在寻找适用于值声明的优雅解决方案(因此请不要 match)。我希望在线解决方案。

编辑:Scala 代码运行器版本 2.9.2

您可以使用 :+ 匹配器对象:

val rest :+ ((p1, p2)) :+ ((l1, l2))  = getList

从 scala 2.10 开始是 the part of standard library

对于以前的版本,您可以使用 source

自己重新定义它