sealed class A
class B1 extends A
class B2 extends A
假設我們有A
類的對象的列表: VAL l:列出[A] =列表何時使用isInstanceOf以及何時使用匹配大小寫語句(在Scala中)?
而且我們希望以濾除(新B1,新B2,新B1,新B1)的B1型元素。 然後,我們需要一個謂語,可以使用以下兩種選擇:
l.filter(_.isInstanceOf[B1])
或者
l.filter(_ match {case b: B1 => true; case _ => false})
就個人而言,我喜歡的第一個進場,但我經常看,應該使用match-case
語句的更多經常(因爲我不知道的原因)。
因此,問題是:是否存在使用isInstanceOf
而不是match-case
聲明的缺點?什麼時候應該使用哪種方法(以及在這裏使用哪種方法以及爲什麼)?
並在末尾給出更窄的類型('List [B1]')。 –
看起來更具可讀性,謝謝。但是這個聲明中的默認情況是什麼?我在哪裏可以閱讀有關此快捷方式案例聲明的更多背景信息以及它如何使用? –
@JohnThreepwood看看[這篇文章](http://ochafik.com/blog/?p=393)。這不是最好的,但仍然非常好,「收集的原因」。簡而言之,收集就像地圖一樣,但僅對那些爲傳遞給此方法的*(部分)*函數定義的值進行工作。在這種情況下,Scala的模式匹配是在[PartialFunction]之上完成的(http://stackoverflow.com/questions/5668053/scala-partial-functions)。另外,您需要使用大括號。 –