2015-01-12 108 views
1

我試圖運行一個來自Scala的Jenetics HelloWorld示例。Scala的Jenetics HelloWorld

import org.jenetics.{BitChromosome, BitGene, Genotype} 
import org.jenetics.engine.{Engine, EvolutionResult} 

object BitCounting extends App { 

    val genotypeFactory = Genotype.of(BitChromosome.of(128, 0.5)) 

    val fitness: java.util.function.Function[Genotype[BitGene], Int] = new java.util.function.Function[Genotype[BitGene], Int] { 
    override def apply(genotype: Genotype[BitGene]): Int = genotype.asInstanceOf[BitChromosome].bitCount() 
    } 

    val engine = Engine.builder(fitness, genotypeFactory).build()  

    val result = engine 
    .stream() 
    .limit(100) 
    .collect(EvolutionResult.toBestGenotype[BitGene, Int]) 

    println(s"Hello world:\n$result") 

} 

我在初始化引擎的行上收到編譯錯誤。編譯器抱怨 不存在符合類型的Engine.Builder。誰能解釋爲什麼?

回答

1

好的,問題在於Engine.builder期望它的第二個類型參數具有Comparable的上限,因爲Scalas Int沒有實現這個接口,上面的代碼沒有編譯出驚喜。

其中一個可能的解決方案是使用java.lang.Integer而不是scala.Int