我希望能够使用 this.type 来定义一种方法,该方法可以创建不可变案例类的新实例。像这样的东西:
trait Expression
{
def left : Expression
def right : Expression
def new_with_changes(l : Expression, r : Expression) : this.type
}
case class Derived(left : Expression, right : Expression)
{
def new_with_changes(l : Expression, r : Expression) : this.type =
{
new Derived(left, right)
}
}
不幸的是,编译器抱怨
test.scala:13: error: type mismatch;
found : Derived
required: Derived.this.type
new Derived(left, right)
^
one error found
为什么新的案例类与 this.type 不匹配?
如果我在 Base.new_with_changes 中将 this.type 更改为 Base 并在 Derived.new_with_changes 中将 Derived 更改为有效,但它似乎错过了 this.type 的优点。
编辑:问题的真正意图是为什么在 Scala 中没有一种等效的方式来声明向下的调用者执行向下转换,这与 this.type 所做的方式非常相似,但对于一般类型。我不认为这很容易,但它会很好。