gpt4 book ai didi

scala - 避免在对一系列混合项目的理解中进行类型转换

转载 作者:行者123 更新时间:2023-12-01 10:51:09 26 4
gpt4 key购买 nike

我知道键入在 Scala 中很重要,理想情况下,您可以通过使用模式匹配之类的东西来绕过类型转换或任何困惑的解决方案。但是,如果我正在遍历作为普通父类(super class)型的子类型的项目列表或序列,并且只想要该子类型序列中特定子类型的那些,我将无法理解我该如何去做。我不认为我可以在 for-comprehension 中放置模式匹配来实现这一点。

例如,我有这些类:

sealed abstract class SuperType
case class SubtypeA extends SuperType
case class SubtypeB extends SuperType

我有一个Seq[SuperType],我想得到一个只有SubtypeA实例的Seq,所以一个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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com