我知道键入在Scala中很重要,理想情况下,您可以使用模式匹配之类来解决类型转换或任何混乱的解决方案。但是,如果我要遍历作为普通超类型的子类型的列表或项目序列,而只想要该子类型的序列中的特定子类型的对象,我将不知道如何处理。我认为我不能在for-comprehension
中放入模式匹配来实现此目的。
例如,让我说这些类:
sealed abstract class SuperType
case class SubtypeA extends SuperType
case class SubtypeB extends SuperType
我有一个
Seq[SuperType]
,我想只得到Seq
实例的SubtypeA
,所以要获得Seq[SubTypeA]
,这样我就可以遍历它并为所有元素执行SubTypeA
提供的方法。 最佳答案
Scala有一个function called collect
可以满足您的需求。它使用部分函数作为参数,如果在元素上定义了部分函数,则将其应用。如果不是,则跳过它。由于匹配本质上是部分函数,因此我们可以利用它来获得优势:
val list: Seq[SuperType] = ???
val listOfAtypes = list.collect({ case a: SubtypeA => a })
{ case a: SubtypeA => a }
是PartialFunction [SuperType,SubtypeA]。关于scala - 避免对一系列混合项进行全面理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20004359/