我有两个未知类型的变量。我想对变量类型的组合进行模式匹配,然后据此采取行动——具体来说,我想实现 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/