この場合、プログラムで明示的なパラメーターの型が必要な理由を理解できないようです。次の方法を使用します。
trait DistTraversableLike[+T, +Repr]
extends DistTraversable[T] {
self: Repr =>
...
def scan1lD[T1 >: T, That](assOp: (T1, T1) => T1)(implicit bf: CanBuildFrom[Repr, T1, That]): That = {
val b = bf(this)
for (x <- group.prefixSumSeq(part, assOp))
b += x
b.result
}
}
次のような特定の実装で使用しようとしています。
val x:DistSeq[Int] = DistSeq((0 until worldSize): _*)
val scan = x.scan1lD(_+_)
次のエラー メッセージが表示されます。
Multiple markers at this line
- missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus{<null>}(x$2{<null>}){<null>})
{<null>}
- missing parameter type for expanded function ((x$1, x$2) => x$1.$plus{<null>}(x$2{<null>}){<null>}){<null>}
- missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus(x$2))
- missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2))
group は、FooParOps-trait (プロトタイプ実装) のメソッドを使用した混合トレイトです。
def prefixSumSeq[T](part: Seq[T], combiner: (T, T) => T): Seq[T] = {
implicit val srlz = getSerializerFor(part)
var result = part.head
var msg = part.reduce(combiner)
for (i <- 0 until log2i(size)) {
val partner = localRank ^ math.pow(2, i).toInt
send(partner, msg)
val number: T = rcv(partner)
msg = combiner(msg, number)
if (partner < localRank) result = combiner(number, result)
}
return (part.tail).scanLeft(result)(combiner)
}
part
からDistTraversable[+T]
であり、次のように定義されていますdef part: Seq[T]
ここで明示的なパラメーターが必要な理由がよくわかりません。さらに情報が必要な場合は教えてください。プログラムは現在非常に複雑です。