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

Free-Thinker 阅读:16 2024-11-01 17:39:52 评论:0

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

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号