0

嗨,我想创建一个参数化特征trait Foo[T] // Foo[T]???,这样,在:

class Bar extends Foo

或者

val b = new Bar() with Foo

“T”将自动成为“Bar”,因为它是混入其中的类型。不知道我会怎么做。

4

1 回答 1

1

根据我对您的问题的理解,我想说不要进行Foo参数化,而只是使用this.typeT在课堂上使用的地方Foo。请参阅如何使用 Scala 的 this 类型、抽象类型等来实现 Self 类型?使用示例。

但是我必须补充一点,在实践中,咬紧牙关并明确表示通常更实际:

class Bar extends Foo[Bar]

这种模式甚至有一个名字:Curiously Recurring Template Pattern(主要来自 C++ 文献)。请参阅定义方法以返回扩展它的类的类型以获取 scala 中的示例

于 2012-11-14T16:02:25.960 回答