0

trait Foo[T] // Foo[T]???こんにちは、次のようなパラメーター化された特性を作成したいと思います。

class Bar extends Foo

また

val b = new Bar() with Foo

「T」は自動的に「バー」になります。これは、混合されるタイプであるためです。どうすればいいのかわかりません。

4

1 に答える 1

1

あなたの問題について私が理解していることから、Fooパラメトリックを作成せず、 class で使用したthis.type場所を使用するだけでよいと思います。Scala の this 型付け、抽象型などを使用して Self 型を実装する方法を参照してください。使用例です。TFoo

ただし、実際には、弾丸を噛んで明示する方が実際的であることが多いことを付け加えなければなりません。

class Bar extends Foo[Bar]

このパターンには名前もあります: Curiously Recurring Template Pattern (主に C++ 文献から)。scala の例については、それを拡張するクラスの型を返す define メソッドを参照してください。

于 2012-11-14T16:02:25.960 に答える