开发者

Scala multi-partition a map - type mismatch; Found (A,B) => Boolean required (A,B) => Boolean?

开发者 https://www.devze.com 2023-04-06 08:17 出处:网络
I\'m trying to multi-partition a map based on a list of predicates. I wrote the following function to do that:

I'm trying to multi-partition a map based on a list of predicates.

I wrote the following function to do that:

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)
}

The scala compiler (I'm running 2.9.1) fails at the indicated place with a "type mismatch; found (A,B) => Boolean, required: (A,B) => Boolean".

Has anyone ever seen anything like that? Any idea how to fix it?

Thanks,

LP


partition expects Function[(A,B), Boolean], that is a function of one pair argument, not a function of two arguments (rather annoying that they are different)

So you need to write ((A,B)) => Boolean as the type of elements of your list

(The error message is not helpful at all, close to a minor bug)


Complementing didierd's answer, you can solve it by writing it like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消