我得到了一个我无法修改的抽象语法树:
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 }
,则相同。
我该怎么做才能让它发挥作用?
答案 0 :(得分:3)
使用正确的语法:
trait BinaryConverter[T <: Expr { def lhs: Expr; def rhs: Expr }] extends Converter[Expr]