trait Foo[T] // Foo[T]???
こんにちは、次のようなパラメーター化された特性を作成したいと思います。
class Bar extends Foo
また
val b = new Bar() with Foo
「T」は自動的に「バー」になります。これは、混合されるタイプであるためです。どうすればいいのかわかりません。
あなたの問題について私が理解していることから、Foo
パラメトリックを作成せず、 class で使用したthis.type
場所を使用するだけでよいと思います。Scala の this 型付け、抽象型などを使用して Self 型を実装する方法を参照してください。使用例です。T
Foo
ただし、実際には、弾丸を噛んで明示する方が実際的であることが多いことを付け加えなければなりません。
class Bar extends Foo[Bar]
このパターンには名前もあります: Curiously Recurring Template Pattern (主に C++ 文献から)。scala の例については、それを拡張するクラスの型を返す define メソッドを参照してください。