在Map的隐式扩展中,Scala curried函数失败

时间:2012-05-14 12:35:58

标签: scala map implicit

我有以下地图扩展名

object ImplicitMap {
  implicit def extendMap(m : Map[String,Any]) = new MapExtension(m)
}
class MapExtension(m : Map[String,Any]) {
  def +?(conditional:Boolean)(pair:(String,Any)):Map[String,Any] = 
    if (conditional) m + pair
    else m
}

此函数在使用时给出编译时错误布尔值不带参数,但是书面显式测试(如下)正常工作

 test ("Map +?") {

    def +?(conditional:Boolean)(pair:(String,Any)):Map[String,Any] = if (conditional)   Map.empty + pair else Map.empty

    +?(true)("hi" -> 2) should equal (Map("hi" -> 2))
  }

1 个答案:

答案 0 :(得分:3)

我假设您正在尝试编写someMap +? (cond)(pair),但这不起作用,因为它将评估为someMap.+?(cond(pair)),您必须将其用作常规方法,而不是作为运算符。 someMap.+?(cond)(pair)适合我。

scala> Map("Foo" -> "bar")
res2: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(Foo -> bar)

scala> res2.+?(true)(("foo", "bar"))
res3: Map[String,Any] = Map(Foo -> bar, foo -> bar)

scala> res2 +? (true)(("foo", "bar"))
<console>:13: error: Boolean(true) does not take parameters
              res2 +? (true)(("foo", "bar"))