Смешивание черты, зависящей от пути

Итак, есть эти различные черты, которые я хочу смешать с базовым классом под названием GPState (состояние генетического программирования). Однако некоторые вещи, которые я хочу смешать, зависят от вещей, о которых я не узнаю, пока не будет создан GPState. Поэтому я использую функцию зависимости от пути scala.

Скажем, моя черта, зависящая от пути, выглядит примерно так

case class HasTermGen[...](depths : Seq[Int], widths : Seq[Int]) {
  trait gen extends GPState[...] {
    override def genInitTerm(): Term = {
      <...some stuff here depending on 'depths' and 'widths'...>
    }
  }
}

Теперь, когда я хочу создать GPState, я хочу иметь возможность сделать что-то вроде этого

val gpstate = new GPState[Var, Type, Term, Double] 
              with <...some mixin...>
              <...some other mixins that do other stuff...>
              with HasTermGen[...](3 to 7, 4 to 9).gen

Но это похоже на синтаксическую ошибку. Я могу это сделать, если сначала определю переменную

val hasTermGen = HasTermGen[...](3 to 7, 4 to 9)
val gpstate = new GPState[Var, Type, Term, Double] 
              with <...some mixin...>
              <...some other mixins that do other stuff...>
              with hasTermGen.gen

Но это выглядит немного некрасиво.

Я готов отказаться от этого специфического синтаксиса и даже использовать такой класс, как «HasTermGen» и многие другие вещи. Что мне действительно нужно, так это иметь возможность создать объект, который реализует методы GPState определенным образом на основе информации, определенной на строительной площадке. Кроме того, вполне вероятно, что средства реализации этих методов будут иметь некоторые общие элементы (с точки зрения данных), которые они захотят использовать, поэтому это также необходимо учитывать. Есть лучший способ сделать это?


person Jake    schedule 03.07.2015    source источник


Ответы (1)


Ваша черта GPState зависит от экземпляров HasTermGen.

val myTermGen = HasTermGen[...](3 to 7, 4 to 9)
val myState = new myTermGen[...] { ... }
person cchantep    schedule 04.07.2015
comment
Извините, я не понимаю, что вы пытаетесь здесь донести. Не могли бы вы объяснить немного больше? - person Jake; 04.07.2015