スレッド数をパラメーターとして指定して、をに変換するこの関数があります。Array
ParArray
def parN[T](collection: Array[T], n: Int) = {
val parCollection = collection.par
parCollection.tasksupport = new ForkJoinTaskSupport(
new concurrent.forkjoin.ForkJoinPool(n))
parCollection
}
今、私はこれをジェネリックにして、以外のコレクションで動作するようにしたいと思いますArray
:
def parN[S, T[S] <: Parallelizable[S, ParIterable[S]]](collection: T[S], n: Int) = {
val parCollection = collection.par
parCollection.tasksupport = new ForkJoinTaskSupport(
new concurrent.forkjoin.ForkJoinPool(n))
parCollection
}
しかし、で呼び出すと、parN(Array(1, 2, 3), 2)
次のエラーが発生します。
inferred type arguments [Int,Array] do not
conform to method parN's type parameter bounds
[S,T[S] <: scala.collection.Parallelizable[S,scala.collection.parallel.ParIterable[S]]]
一方、これは機能しています:
val x: Parallelizable[Int, ParIterable[Int]] = Array(1, 2, 3)
私の型パラメータで何が間違っているのでしょうか?