Scala многораздельная карта - несоответствие типов;Найдено (A, B) => Требуется логическое значение (A, B) => Логическое значение? - PullRequest
6 голосов
/ 19 сентября 2011

Я пытаюсь создать многораздельное отображение карты на основе списка предикатов.

Для этого я написал следующую функцию:

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 (I 'm выполняется 2.9.1) в указанном месте происходит сбой с "несоответствием типов; найдено (A, B) => логическое значение, требуется: (A, B) => логическое значение".

Кто-нибудь когда-либо видел что-либокак это?Есть идеи как это исправить?

Спасибо,

LP

Ответы [ 2 ]

11 голосов
/ 19 сентября 2011

раздел ожидает Function[(A,B), Boolean], что является функцией одного парного аргумента, а не функцией двух аргументов (довольно неприятно, что они разные)

Поэтому вам нужно написать1006 * как тип элементов вашего списка

(сообщение об ошибке вообще не помогает, близко к незначительной ошибке)

7 голосов
/ 19 сентября 2011

Дополняя Didierd's ответ , вы можете решить это, написав это так:

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