2013-10-04 21 views
1

我在評論一些試圖學習該語言的Scala代碼。冉成片,看起來像下面這樣:`var @ _ *`在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

請提供更多的上下文。 –

+0

對不起,我想我錯了 - 額外的上下文沒有必要:) –

+0

另請參見[值綁定](http://stackoverflow.com/a/2359365/298389)。你的情況實際上是* value綁定*與* varargs語法糖*的組合。 –

回答

5

如果在應用序列作爲可變參數的一些方法/構造函數的形式遇到_*之前,例如:

val myList = List(args: _*) 

那麼這就是「不應用」(更具體地說,搜索「unapplySeq 「)版本:取序列並將其轉換回」可變參數「,然後將結果賦值爲rest

2

x @ p模式p匹配,並結合整個比賽x的結果。此模式匹配Seq,其中包含'+'後跟任意數字(*)的未命名元素(_),並將rest綁定到這些元素的Seq

+1

*是提取器的名稱,還是它是語法的? – Owen

+0

什麼將是偉大的也是一些術語,我可以谷歌查看更多的例子/解釋。我嘗試搜索'模式匹配',但它不進入提取器或類似的東西。 – randombits

+1

@randombits我試着用谷歌搜索「scala模式匹配unapplySeq」,並提出了[此鏈接](http://daily-scala.blogspot.com.au/2009/09/extract-sequences-unapplyseq.html) – Shadowlands