混合路径依赖性状

时间:2015-07-03 18:58:53

标签: scala mixins traits dependent-type path-dependent-type

因此,我想将这些不同的特征混合到名为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的方法。另外,实现这些方法的方法可能会有一些他们想要利用的共同元素(数据方面),因此也需要考虑。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您的特质GPState取决于HasTermGen

的实例
val myTermGen = HasTermGen[...](3 to 7, 4 to 9)
val myState = new myTermGen[...] { ... }