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

时间:2012-07-10 20:21:43

标签: 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调用?

1 个答案:

答案 0 :(得分:5)

这有效:

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
  }
}