用抽象类型交换类型参数

时间:2011-12-23 18:32:57

标签: scala

为了避免在子类化参数化类时不得不重复类型参数信息,我试图改写一些代码来改为使用抽象类型。

我想表达的内容类似于:

class Group[A]

abstract class Thing[A, G <: Group[A]] {
  val group: G
}

class SomeGroup[A] extends Group[A] { g =>    
  object SomeThing extends Thing[A, SomeGroup[A]] {
    val group = g
  }
}

使用抽象类型,到目前为止我最好的尝试是:

class Group {
  type A
}

abstract class Thing { t =>
  type A
  type G <: Group { type A = t.A }
  val group: G
}

class SomeGroup extends Group { g =>
  object SomeThing extends Thing {
    type A = g.A
    type G = SomeGroup { type A = g.A }
    val group = g
  }
}

但是,我在最后一行收到编译错误,说“值组具有不兼容的类型”。

如何使用抽象类型编写第一个示例?

1 个答案:

答案 0 :(得分:3)

你需要给类型检查器/推断器一点帮助:

val group : G = g

让它通过。