Scala匿名类型约束

时间:2014-05-14 16:23:30

标签: scala inheritance types anonymous traits

我得到了一个我无法修改的抽象语法树:

trait Expr
case class Equals(lhs: Expr, rhs: Expr) extends Expr
case class Plus(lhs: Expr, rhs: Expr) extends Expr
case class Id(value: String) extends Expr

现在我想创建一个转换器,但这失败了:

trait Converter[T <: Expr]
trait BinaryConverter[T <: Expr with { def lhs: Expr; def rhs: Expr }] extends Converter[Expr] {
  ???
}

但这不起作用。如果我删除Expr with,那么它会编译。如果我删除with { def lhs: Expr; def rhs: Expr },则相同。 我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:3)

使用正确的语法:

trait BinaryConverter[T <: Expr { def lhs: Expr; def rhs: Expr }] extends Converter[Expr]