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) => Boolean,需要:(A,B) => Boolean”。

有没有人见过这样的东西?知道如何解决吗?

谢谢,

LP

4

2 回答 2

11

partition 期望Function[(A,B), Boolean],这是对参数的函数,而不是两个参数的函数(很烦人的是它们是不同的)

所以你需要写成((A,B)) => Boolean你的列表元素的类型

(错误消息根本没有帮助,接近一个小错误)

于 2011-09-19T11:08:05.467 回答
7

补充didierd 的 答案,你可以这样写来解决它:

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