用于匹配一个案例类的scala简写

时间:2014-10-04 21:42:02

标签: scala

除了使用.isInstanceOf[ClassName]还是完全匹配表达式之外,是否真的没有简单的惯用方法来检查对象是否是某个类?

单个类的匹配可以避免使用.AsInstanceOf的必要性(在必要时对类别唯一成员进行操作),但一般来说非常冗长,并且要求明确涵盖默认情况。

也许会有一些用于处理类层次结构的库,它简化了将类分配给对象并检查它们,以绕过scala核心类匹配器的限制。我甚至考虑使用普通集合而不是使用scala类来实现我自己的类型赋值,层次结构和检查解决方案,以实现更加惯用的丰富层次结构类型建模。

1 个答案:

答案 0 :(得分:4)

不,没有。故意使用语法冗长,因为必须使用此功能通常表示设计不良。

然而,您可以自己编写一个函数:

implicit class WithAs[T](x: T) {
  import scala.reflect._
  def as[O: ClassTag]: Option[O] = x match {
    case o: O => Some(o)
    case _ => None
  }
}

live demo