3
我知道在Scala中键入是一件大事,理想情况下,您可以使用类似于模式匹配的东西来绕过类型转换或任何混乱的解决方案。然而,我无法理解,如果我遍历一个列表或一系列常用超类型的子类型的项目,并且只想在该子类型的一个序列中指定一个特定子类型的项目,我该怎么做。我不认为我可以在for-comprehension
中进行模式匹配来实现此目的。避免在一系列混合项目中进行类型转换
因此,可以说,比如我有这些类:
sealed abstract class SuperType
case class SubtypeA extends SuperType
case class SubtypeB extends SuperType
我有一个Seq[SuperType]
,我想只是SubtypeA
实例的Seq
,所以Seq[SubTypeA]
,让那么我可以遍历它并为所有元素执行由SubTypeA
提供的方法。
谢谢,工作就像一个魅力!我仍然是Scala的初学者,所以仍然需要习惯所有这些黑暗的秘密:) – jbx
请注意'({...})'语法是多余的,您只需要大括号:'list.collect {case a:SubtypeA => a}' – dhg
@dhg是的,你是对的。我只是想强调'{case ...}'将成为'PartialFunction',需要传递给'collect'。 –