Tôi có this function để chuyển đổi một Array
đến một ParArray
, đưa ra các số đề như tham số:tham số kiểu Generic cho chuyển đổi vào bộ sưu tập song song
def parN[T](collection: Array[T], n: Int) = {
val parCollection = collection.par
parCollection.tasksupport = new ForkJoinTaskSupport(
new concurrent.forkjoin.ForkJoinPool(n))
parCollection
}
Bây giờ tôi muốn làm cho điều này chung chung, như vậy mà nó làm việc với các bộ sưu tập khác hơn 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
}
Nhưng when I call it với parN(Array(1, 2, 3), 2)
, tôi nhận được lỗi này:
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]]]
Mặt khác, điều này đang làm việc:
val x: Parallelizable[Int, ParIterable[Int]] = Array(1, 2, 3)
Bất kỳ ý tưởng những gì có thể xảy ra với các tham số kiểu của tôi?
WOw, đánh bại tôi. Mẫu kiểu lớp là con đường để đi đến đây. Tuy nhiên, bạn không cần phải thêm vào một ': Manifest' yêu cầu để làm việc với mảng? – wheaties
@wheaties không có 'Manifest \ ClassTag' thậm chí không cần thiết vì phương thức của anh ta không thực sự tạo ra một mảng (' Parallelizable.par' không cần một tệp kê khai, nó luôn biết cách xây dựng một bộ sưu tập par). Và trong trường hợp của mảng, nó chỉ kết thúc tốt đẹp mảng ban đầu, nó thậm chí không sao chép nó. – gourlaysama
Cảm ơn câu trả lời chi tiết, tôi đã kết thúc bằng cách sử dụng một khung nhìn '<%' được kết hợp với 'CustomParallelizable'. – ValarDohaeris