3
我有两个未知类型的变量。我想在变量类型的组合上进行模式匹配,然后根据它进行操作 - 具体来说,我想实现Comparator[Any]
并根据它们的类型比较两个变量。此代码将产生期望的结果:关于两个绑定变量类型的Scala模式匹配
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
电话?
你都拿到了“可达代码”错误,因为第二和第三'case's是相同的。 'case'中的'o1'和'o2'受到匹配的约束,因此它们被视为新变量,与旧的'o1'和'o2'不同。 – dhg 2012-07-10 20:32:50
Thx,只是想出了:) – Raman 2012-07-10 20:33:37