何时使用 isInstanceOf 以及何时使用 match-case-statement(在 Scala 中)?

2024-01-05

sealed class A
class B1 extends A    
class B2 extends A

假设我们有一个类对象列表A: val l: List[A] = List(新 B1, 新 B2, 新 B1, 新 B1)

我们要过滤掉B1类型的元素。 然后我们需要一个谓词并且可以使用以下两种替代方案:

l.filter(_.isInstanceOf[B1])

Or

l.filter(_ match {case b: B1 => true; case _ => false})

就我个人而言,我更喜欢第一种方法,但我经常读到,一个应该使用match-case更频繁地声明(出于我不知道的原因)。

因此,问题是:使用是否有缺点?isInstanceOf而不是match-case陈述 ?什么时候应该使用哪种方法(以及这里应该使用哪种方法以及为什么)?


你可以这样过滤:

l.collect{ case x: B1 => x }

在我看来,这更具可读性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 isInstanceOf 以及何时使用 match-case-statement(在 Scala 中)? 的相关文章

  • 如何使用 zio-test 测试异常情况

    我有以下功能 我想测试 def people id Int RIO R People 如果有 People 则此函数返回 Peopleid 分别 如果没有则失败 例如 IO fail ServiceException s No People
  • scala 如何对元组进行排序?

    我试图了解 scala 如何处理元组的排序和排序 例如 如果我得到了列表 val l for i lt 1 to 5 yield i i 2 Vector 1 2 2 4 3 6 4 8 5 10 scala 知道如何对其进行排序 l so
  • 我可以使用特征中的方法重写 scala 类方法吗?

    class PasswordCaseClass val password String trait PasswordTrait self PasswordCaseClass gt override def password blue val
  • 将 Scala Future 转变为 CompletableFuture

    我的项目中有一个 Akka 层 它返回Scala Future 而接收 Future 的部分是 Java 风格的 团队中的人不了解 Scala 他们宁愿使用CompletableFuture因为他们更了解 Java 8 API 有没有什么好
  • Scala [2.11.6] 编译 Stackoverflow 错误(似乎对迄今为止发现的建议有抵抗力)

    scala版本 2 11 6 我当然尝试过clean很多次以及update 不确定是否有clean deeper刷新 jar 库 真正奇怪的是 这种情况同时发生在两台机器上 其中一台在没有执行任何特殊操作的情况下恢复了 而另一台仍然没有恢复
  • 从apache Spark中的文本文件查找rdd中存储的数据大小

    我是 Apache Spark 版本 1 4 1 的新手 我编写了一段小代码来读取文本文件并将其数据存储在 Rdd 中 有没有一种方法可以获取 rdd 中数据的大小 这是我的代码 import org apache spark SparkC
  • 避免函数内装箱/拆箱

    对于数字密集型代码 我编写了一个具有以下签名的函数 def update f Int Int Double gt Double Unit 然而 因为Function3不是专门的 每个应用程序f结果对 3 个参数和结果类型进行装箱 拆箱 我可
  • 在 Scala 中设计方便的默认值映射

    我发现自己使用了很多嵌套映射 例如 Map Int Map String Set String 并且我希望在访问新密钥时自动创建新的 Map Set 等 例如 像下面这样 val m m 1992 foo bar 请注意 如果不需要 我不想
  • Scala:var List 与 val MutableList

    在 Odersky 等人的 Scala 书中 他们说使用列表 我还没有从头到尾读过这本书 但所有的例子似乎都使用了 val List 据我了解 还鼓励人们使用 vals 而不是 vars 但在大多数应用程序中 使用 var List 或 v
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 类型不匹配;发现:长 需要:Int

    我有一个应该返回 Long 的方法 但我收到一个错误 type mismatch found Long required Int 方法如下 def getRandom IMEI from Long to Long Long if from
  • Playframework 2.0 在视图模板中定义函数

    我正在开发一个使用 PlayFramework 2 0 的项目 在阅读了一些 scala 之后 我想在视图模板中嵌入一些动态代码 所以 我做了以下事情 def getMystring sequence Int if patternForm
  • 为什么我的代码在 Spark Pregel 中执行需要很长时间?

    我在 Spark 中使用 Pregel 编写了处理图形的代码 但对于小数据集来说 它的执行速度非常非常慢 我以前用pregel写过程序 但是这段代码运行速度确实很慢 我的集群由 2 个工作人员组成 每个都有核心 i5 CPU 和 6 GB
  • 组合部分函数

    我有两个偏函数f and g 它们没有副作用并且执行速度快 将它们组合成另一个部分函数的最佳方法是什么h这样h isDefinedAt x iff f isDefinedAt x g isDefinedAt f x 如果h是一个返回一个函数
  • 如何识别远程参与者?

    我有一个远程参与者 客户端 它正在向另一个远程参与者 服务器 注册 然后注销 使用关闭挂钩 然而 虽然服务器接收到注销 但实际sender财产是一个不同的 Channel 对象 所以在我的服务器日志中我有 Registered new cl
  • scala.concurrent.blocking - 它实际上做了什么?

    我花了一段时间学习 Scala 执行上下文 底层线程模型和并发性的主题 你能解释一下通过什么方式吗scala concurrent blocking 调整运行时行为 and 可以提高性能或避免死锁 如中所述scaladoc http www
  • 对列表中的相邻元素进行分组

    假设我想编写一个函数来执行此操作 输入 1 1 3 3 4 2 2 5 6 6 输出 1 1 3 3 4 2 2 5 6 6 它将相同的相邻元素分组 这个方法的名称应该是什么 此操作有标准名称吗 In 1 1 3 3 4 2 2 5 6 6
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • 将额外的参数传递给多态函数?

    我有一个多态函数 可以将列表转换为集合 import shapeless PolyDefns gt import shapeless val lists List 1 2 List A B List 1 1 2 2 HNil object
  • 在 scala 中保留推导的更高类型

    我有一个高阶类型 并致力于用它构建一些 DSL 我正在寻找一种方法来定义可以接受类型而无需显式指定此类型的函数 自我描述示例 class Wrap T val data T class DSL def doSomething T x Wra

随机推荐