1

この場合、プログラムで明示的なパラメーターの型が必要な理由を理解できないようです。次の方法を使用します。

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]

ここで明示的なパラメーターが必要な理由がよくわかりません。さらに情報が必要な場合は教えてください。プログラムは現在非常に複雑です。

4

1 に答える 1