什么`var @ _ *`在Scala中表示

时间:2013-10-04 01:26:41

标签: scala

我正在审查一些尝试学习该语言的Scala代码。进入如下所示的部分:

 case x if x startsWith "+" => 
          val s: Seq[Char] = x
          s match {
            case Seq('+', rest @ _*) => r.subscribe(rest.toString){ m => }
          }

在这种情况下,rest @ _*到底在做什么?我理解这对于一个序列是pattern match,但我并不完全理解序列中的第二个参数应该做什么。

被要求提供更多上下文,所以我添加了我发现的代码块。

2 个答案:

答案 0 :(得分:5)

如果您之前遇到_*以将seq作为varargs应用于某些方法/构造函数的形式,例如:

val myList = List(args: _*)

那么这就是" unapply" (更具体地说,搜索" unapplySeq")版本:获取序列并转换回" varargs",然后将结果分配给rest

答案 1 :(得分:2)

x @ p匹配模式p,并将整个匹配的结果绑定到x。此模式与Seq匹配'+'后跟任意数字(*)的未命名元素(_)并将rest绑定到Seq这些元素。