3

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 が存在しないと不平を言います。誰でも理由を説明できますか?

4

1 に答える 1

2

OK、問題は、Engine.builder がその 2 番目の型パラメーターに Comparable への上限があることを期待していることでした。Scalas Int はこのインターフェイスを実装していないため、上記のコードがコンパイルされないのは驚くことではありません。

可能な解決策の 1 つは、scala.Int の代わりに java.lang.Integer を使用することです。

于 2015-01-12T16:54:52.573 に答える