this.typeを使用して、不変のケースクラスの新しいインスタンスを作成するメソッドを定義したいと考えています。このような何か: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)
}
}
は残念ながら、コンパイラは新しいケースクラスはthis.typeと一致していませんどのように来る
test.scala:13: error: type mismatch;
found : Derived
required: Derived.this.type
new Derived(left, right)
^
one error found
を不平を言いますか?
Base.new_with_changesでthis.typeをBaseに変更し、Derived.new_with_changesで派生しても動作しますが、this.typeがきれいでないと思われます。
編集:この問題の本来の目的は、downの呼び出し側がthis.typeと同じようにダウンキャストを実行することを宣言するために、Scalaで同等の方法を使用しない理由です。私はそれが簡単だとは思わないが、それはいいだろう。
ハッキーですが、うまくいきます。私たちがこのようなことを言語に与えることができれば、それはクールだ。 –