使用mixin类的class成员参数化超类

时间:2017-10-04 14:23:46

标签: scala inheritance multiple-inheritance mixins

trait Mixin {
    class P
}

abstract class SuperClass[T]

class Impl extends SuperClass[P] with Mixin

给出:

not found: type P

有没有办法提供作为参数混合的成员类P到超类,或者这是不可能的,因为评估的顺序(或其他一些问题?)。

1 个答案:

答案 0 :(得分:1)

通过这种方式,范围无法正常运行。但是类型成员和类型参数几乎是等价的,如果你可以让T成为SuperClass的成员,那么你就得到了

abstract class SuperClass {
  type T
}
// optional
object SuperClass {
  type Aux[T0] = SuperClass { type T = T0 }
}

class Impl extends SuperClass with Mixin {
  type T = P
}

如果您希望将T用作通用参数,请使用SuperClass.Aux[T]