Обмен параметрами типа с абстрактными типами - PullRequest
4 голосов
/ 23 декабря 2011

Чтобы избежать необходимости повторять информацию о параметрах типа при создании подклассов параметризованных классов, я пытаюсь переписать некоторый код для использования абстрактных типов.

То, что я хотел бы выразить, похоже на:

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 Ответ

3 голосов
/ 23 декабря 2011

Вам нужно немного помочь контролеру типов:

val group : G = g

позволяет пройти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...