[英]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.