嗨,我想创建一个参数化特征trait Foo[T] // Foo[T]???
,这样,在:
class Bar extends Foo
或者
val b = new Bar() with Foo
“T”将自动成为“Bar”,因为它是混入其中的类型。不知道我会怎么做。
根据我对您的问题的理解,我想说不要进行Foo
参数化,而只是使用this.type
您T
在课堂上使用的地方Foo
。请参阅如何使用 Scala 的 this 类型、抽象类型等来实现 Self 类型?使用示例。
但是我必须补充一点,在实践中,咬紧牙关并明确表示通常更实际:
class Bar extends Foo[Bar]
这种模式甚至有一个名字:Curiously Recurring Template Pattern(主要来自 C++ 文献)。请参阅定义方法以返回扩展它的类的类型以获取 scala 中的示例