我正在审查一些尝试学习该语言的Scala代码。进入如下所示的部分:
case x if x startsWith "+" =>
val s: Seq[Char] = x
s match {
case Seq('+', rest @ _*) => r.subscribe(rest.toString){ m => }
}
在这种情况下,rest @ _*
到底在做什么?我理解这对于一个序列是pattern match
,但我并不完全理解序列中的第二个参数应该做什么。
被要求提供更多上下文,所以我添加了我发现的代码块。
答案 0 :(得分:5)
如果您之前遇到_*
以将seq作为varargs应用于某些方法/构造函数的形式,例如:
val myList = List(args: _*)
那么这就是" unapply" (更具体地说,搜索" unapplySeq")版本:获取序列并转换回" varargs",然后将结果分配给rest
。
答案 1 :(得分:2)
x @ p
匹配模式p
,并将整个匹配的结果绑定到x
。此模式与Seq
匹配'+'
后跟任意数字(*
)的未命名元素(_
)并将rest
绑定到Seq
这些元素。