使用特定方法签名匹配任何类?

时间:2016-05-05 14:47:01

标签: scala

Atm我有很多:

t match {
    case And(lhs, rhs) => { attach(lhs, rhs) }
    case Or(lhs, rhs) => { attach(lhs, rhs) }
    ...
}

是否有可能以任何方式匹配任何具有签名Class(lhs: ExprTree, rhs: ExprTree)

的类

1 个答案:

答案 0 :(得分:0)

我会尝试使用特殊界面(特征)标记所有类似你的类。

object o {

  trait AsTuple {
    def a: ExprTree
    def b: ExprTree
  }
  trait ExprTree
  case object Leaf extends ExprTree
  case class And(a: ExprTree, b: ExprTree) extends ExprTree with AsTuple
  case class Or(a: ExprTree, b: ExprTree) extends ExprTree with AsTuple

  def p: ExprTree = ???

  p match {
    case d: AsTuple => // attach(d.a, d.b)
  }



}