我得到了一个我无法修改的抽象语法树:
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 }
.
我应该怎么做才能让它发挥作用?
最佳答案
使用正确的语法:
trait BinaryConverter[T <: Expr { def lhs: Expr; def rhs: Expr }] extends Converter[Expr]
关于Scala 匿名类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660146/