Это блок кода, над которым я работаю. Это описание гена генетического алгоритма. Я хочу, чтобы он был гибким и учитывал разные типы генных значений (int, strings, ecc. Ecc.) И различные стратегии инициализации. В настоящее время единственное, что не работает, это то, что в случае IntGene
он говорит, что мне нужно инициализировать initVal
, но я хочу, чтобы он был связан с реализацией InitStrategy
(например, RandomInit
) при создании экземпляра класса. Как я могу отложить наследование и взять реализацию из свойства, которое я связываю с экземпляром?Наследовать от свойства при создании экземпляра класса
abstract trait InitStrategy[T]{
def initVal(limit:Int=0):T
}
trait RandomInit[T] extends InitStrategy[T]{
this:{def randomFunc(limit:Int):T}=>{
def initVal(limit:Int=0):T=this.randomFunc(limit)
}
}
abstract trait Gene[T]
case class IntGene(v:Option[Int]=None,limit:Int=0) extends Gene[Int] with InitStrategy[Int]{
val value=v match{
case None => initVal(limit)
case Some(x)=> x
}
def randomFunc(limit:Int):Int= (new Random).nextInt(limit)
}