`self` 参照で Scala 特性を使用するにはどうすればいいですか? 質問する

`self` 参照で Scala 特性を使用するにはどうすればいいですか? 質問する

次のようなコード記述特性をいくつか見ました。

trait SelfAware { self: Self =>
 ....
}

class Self
val s = new Self with SelfAware // this is ok
println(s.self) // error happened

class X
new X with SelfAware // error happened here

なぜエラーが発生したのか、またこの方法で特性をどのように使用すればよいのかを知りたいです。

ベストアンサー1

エラーが発生するのは、this参照 ( と名付けたself) の型を 型に制限しているためですSelf。 とした場合new Self with SelfAware、そのオブジェクトは要求どおりの型であるため、問題ありませんSelf。 しかし、 とした場合、が のサブタイプであるという証拠はまったくnew X with SelfAwareありません。XSelf

型の新しいオブジェクトではX with SelfAware、そのメンバーの型は何でしょうか? 型ではなく、型にselfなります。しかし、型である必要があるように特性を定義したので、型エラーが発生します。SelfXSelfAwareselfSelf

おすすめ記事