0

次のマップ拡張機能があります

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
}

この関数を使用すると、Boolean のコンパイル時エラーが発生しますが、パラメーターを取りませんが、記述された明示的なテスト (次のように) は正しく機能します

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

1 に答える 1

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"))
于 2012-05-14T12:42:03.977 に答える