您好我想创建一个参数化特征trait Foo[T] // Foo[T]???
,使其在:
class Bar extends Foo
或
val b = new Bar() with Foo
“T”将自动为“Bar”,因为它是混入的类型。不知道我会怎么做。
答案 0 :(得分:1)
根据我未解决的问题,我会说不要Foo
参与,只需使用this.type
,您可以在课程T
中使用Foo
。有关使用示例,请参阅How to use Scala's this typing, abstract types, etc. to implement a Self type?。
但是我必须补充一点,在实践中,咬紧牙关通常更为实际,只需要明确:
class Bar extends Foo[Bar]
这种模式甚至有一个名称:奇怪的重复模板模式(主要来自C ++文献)。 有关scala中的示例,请参阅define method to return type of class extending it