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

Lor*_*nix 6 types scala 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)
}
Run Code Online (Sandbox Code Playgroud)

Scala编译器(我运行2.9.1)失败在与所指示的地方 "类型不匹配;实测值(A,B)=>布尔,需要:(A,B)=>布尔".

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

谢谢,

唱片

Did*_*ont 11

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

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

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

  • @didierd似乎确实存在回归.我打开了[SI-5007](https://issues.scala-lang.org/browse/SI-5007). (4认同)
  • 不知道2.9.1,但是在2.9.0-1,REPL给出了错误信息`found:(A,B)=> Boolean required:((A,B))=> Boolean`这样看起来很好 (2认同)

Dan*_*ral 7

补充didierd的 答案,您可以通过这样编写来解决它:

        val (a, b) = map partition l.tupled;
Run Code Online (Sandbox Code Playgroud)