因此,我想将这些不同的特征混合到名为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的方法。另外,实现这些方法的方法可能会有一些他们想要利用的共同元素(数据方面),因此也需要考虑。有更好的方法吗?
答案 0 :(得分:0)
您的特质GPState
取决于HasTermGen
。
val myTermGen = HasTermGen[...](3 to 7, 4 to 9)
val myState = new myTermGen[...] { ... }