我有我要做的模式匹配對後來以下數據模型:斯卡拉圖案匹配的結構
abstract class A
case class C(s:String) extends A
abstract class B extends A
case class D(i:Int) extends B
case class E(s:Int, e:Int) extends B
A是層次的抽象的超類型。 C是A的一個具體子類A的其它具體子類是B的又A.
的子類的子類,現在,如果我寫這樣的事情,它的工作原理:
def match(a:A) a match {
a:C => println("C")
a:B => println("B")
}
然而,在for循環中,我不能對陣B.我認爲我需要一個構造格局,但由於B是抽象的,有一個B.
val list:List[A] = List(C("a"), D(1), E(2,5), ...)
for (b:B <- list) println(b) // Compile error
for ([email protected] <- list) println(b) // Compile error
這裏沒有構造模式,我想打印僅有B實例。針對這種情況的任何解決方法?
如何使用收集需要嵌套迭代時,我使用的首要原因是,是具有人另一種類型的X? As的。所以,我想這樣寫: '類X(名稱:字符串,如:列表[A])' 'LISTX = ... //一個X' 的列表爲'(X < - LISTX; b:B < - X.as')println(b) 當然,我可以在兩個步驟中使用for和收集,但我想知道是否有一個單行的解決方案... – Wickoo
@Ali :請參閱我的答案,以另一種方式來做到這一點,按照您的要求使用理解。 –