Scala参数化特征类型 - 默认为mixin超类型?

时间:2012-11-14 15:27:08

标签: scala types

您好我想创建一个参数化特征trait Foo[T] // Foo[T]???,使其在:

class Bar extends Foo

val b = new Bar() with Foo

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

1 个答案:

答案 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