簡體   English   中英

Scala模式匹配引用

[英]Scala pattern matching referencing

當模式匹配案例類時,你如何實際引用它匹配的類?

這是一個展示我的意思的例子:

sealed trait Value
case class A(n: Int) extends Value

v match {
  case A(x) =>
   doSomething(A);
}

其中v是類型值, doSomething采用類型A的參數,而不是Value

做這個

v match {
   case a @ A(x) =>
   doSomething(a)
}

@被稱為Pattern Binder (參見§8.1.3)。 來自參考:

圖案裝訂器x @ p由圖案變量x和圖案p組成。 變量x的類型是模式p的靜態類型T. 此模式匹配模式p匹配的任何值v,前提是v的運行時類型也是T的實例,並且它將變量名稱綁定到該值。

v match {
  a @ case A(x) =>
    doSomething(a)
}

順便說一下,你不需要分號。

案例類是解構的

您不會引用A,因為您將引用解構對象,因此您只能在案例的上下文中訪問x。

但是,您會知道上下文是A,因為您匹配了大小寫,因此從您的參數構造一個新的case類很容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM