我希望能够使用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.new_with_changes可以工作,但它似乎错过了this.type的好处。
编辑:问题的真正目的是为什么没有在Scala中有一个等价的方法来声明down的调用者执行downcast,与this.type所做的很相似,但是对于一般类型。我不认为这很容易,但它会很好。
哈克,但它的作品。如果我们能在语言中得到这样的东西,那很酷。 – 2009-04-27 06:34:15