jbx*_*jbx 3 scala filter for-comprehension
我知道在Scala中输入是一个大问题,理想情况下,你可以通过使用模式匹配等方式来进行类型转换或任何混乱的解决方案.但是,如果我在一个列表或一系列项目中迭代这些公共超类型的子类型,并且只想在该子类型的序列中使用特定子类型的那些项目,我无法理解如何去做.我不认为我可以在模式匹配中for-comprehension实现这一点.
所以,比方说我有这些类:
sealed abstract class SuperType
case class SubtypeA extends SuperType
case class SubtypeB extends SuperType
Run Code Online (Sandbox Code Playgroud)
我有一个Seq[SuperType],我想得到一个Seq只是SubtypeA实例,所以一个Seq[SubTypeA],所以我可以循环它并执行由SubTypeA所有元素提供的方法.
Scala有一个名为collect的函数,可以完全满足您的需求.它将Partial Function作为参数,如果在元素上定义了Partial Function,则它将应用它.如果不是那么它会跳过它.由于匹配本质上是一个部分函数,我们可以使用它来获得我们的优势:
val list: Seq[SuperType] = ???
val listOfAtypes = list.collect({ case a: SubtypeA => a })
Run Code Online (Sandbox Code Playgroud)
{ case a: SubtypeA => a } 是PartialFunction [SuperType,SubtypeA].