Scala 模式匹配两个绑定(bind)变量的类型

标签 scala

我有两个未知类型的变量。我想对变量类型的组合进行模式匹配,然后据此采取行动——具体来说,我想实现 Comparator[Any] 并根据它们的类型比较两个变量.此代码产生所需的结果:

class SomethingComparator extends util.Comparator[Any] {
  override def compare(o1: Any, o2: Any) = List(o1, o2).map(_.isInstanceOf[Something]) match {
    case List(true, true) => o1.asInstanceOf[Something].someInt.compareTo(o2.asInstanceOf[Something].someInt)
    case List(true, false) => -1
    case List(false, true) => 1
    case _ => 0
  }
}

有没有办法避免 map 调用和直接对类型进行模式匹配,从而避免第一次匹配中的两次 asInstanceOf 调用?

最佳答案

这个有效:

class SomethingComparator extends util.Comparator[Any] {
  override def compare(o1: Any, o2: Any) = (o1, o2) match {
    case (o1:Something, o2:Something) => o1.someInt.compareTo(o2.someInt)
    case (o1:Something, o2:Any) => -1
    case (o1:Any, o2:Something) => 1
    case _ => 0
  }
}

关于Scala 模式匹配两个绑定(bind)变量的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421314/

相关文章:

java - 舍入前可以检测到 "java.lang.ArithmeticException: Rounding necessary"吗?

scala - 如何在 Scala 中重命名文件?

scala - 微风中的切片线性运算

database - 将 Squeryl 和 H2 数据库用于桌面应用程序的性能问题

scala - flink 作业没有跨机器分布

scala - `JObject(rec) <- someJArray` 在理解中意味着什么

eclipse - 在 Scala IDE for Eclipse 中启用任务标签

字节的 Scala 十六进制文字

regex - Scala 正则表达式联合

scala - 什么是 Scala 中的盒装错误?