Scala多分区地图 - 类型不匹配;找到(A,B)=>需要布尔值(A,B)=>布尔?

时间:2011-09-19 10:54:57

标签: scala types map data-partitioning

我正在尝试根据谓词列表对地图进行多分区。

我写了以下函数来做到这一点:

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

2 个答案:

答案 0 :(得分:11)

分区需要Function[(A,B), Boolean],这是一个对参数的函数,而不是两个参数的函数(相当恼人,它们是不同的)

因此,您需要将((A,B)) => Boolean写为列表元素的类型

(错误消息根本没用,接近小错误)

答案 1 :(得分:7)

补充didierd's answer,你可以这样解决它:

        val (a, b) = map partition l.tupled;