例如:
List(1,2,3,4) match {
case List(x: Int, y: Int, *rest) =>
println(rest) // i want to get List(3,4)
}
_*
可以匹配多个变量,但似乎能够捕获它们。
谢谢!
答案 0 :(得分:4)
您可以使用rest @ _*
:
List(1,2,3,4) match {
case List(x: Int, y: Int, rest @ _*) =>
println(rest)
}
请注意,这是一般性的:您可以使用x @ pattern
将名称x
提供给pattern
匹配的任何值(前提是此值具有合适的类型)。请参阅http://scala-lang.org/files/archive/spec/2.11/08-pattern-matching.html#pattern-binders。
答案 1 :(得分:2)
List(1, 2, 3, 4) match {
case _ :: _ :: tail => println(tail) // prints List(3, 4)
}
答案 2 :(得分:2)
您可以通过cons运算符简单匹配列表:
List(1, 2, 3, 4) match {
case x :: y :: rest => println(rest)
} // gives you "List(3, 4)" to stdout
答案 3 :(得分:1)
在列表上调用模式匹配的另一种方法,
val List(x,y,rest @ _*) = List(1,2,3,4)
提取
x: Int = 1
y: Int = 2
rest: Seq[Int] = List(3, 4)