6

述語のリストに基づいてマップをマルチパーティション化しようとしています。

私はそれを行うために次の関数を書きました:

def multipartition[A,B](map : Map[A,B], list : List[(A,B) => Boolean]) : List[Map[A,B]] = 
    list match {
        case Nil => 
            Nil
        case l :: ls => 
            val (a, b) = map partition l; // type mismatch; found (A,B) => Boolean, required: (A,B) => Boolean
            return a :: multipartition(b, ls)
}

scala コンパイラ (私は 2.9.1 を実行しています) は、指定された場所で「型の不一致; 見つかった (A,B) => ブール値、必須: (A,B) => ブール値」で失敗します。

誰もそのようなものを見たことがありますか?それを修正する方法はありますか?

ありがとう、

LP

4

2 に答える 2

11

パーティションは を期待Function[(A,B), Boolean]します。これは、 2 つの引数の関数ではなく、 1 つのペアの引数の関数です (それらが異なることはむしろ迷惑です)。

((A,B)) => Booleanしたがって、リストの要素のタイプとして記述する必要があります

(エラー メッセージはまったく役に立たず、小さなバグに近い)

于 2011-09-19T11:08:05.467 に答える
7

didierd's answerを補完すると、次のように記述して解決できます。

        val (a, b) = map partition l.tupled;
于 2011-09-19T11:37:53.313 に答える