Le code suivant:scala Carte FilterKeys: Projection ne peut être attribué à une référence de la carte
var m: Map[String, Int] = Map("A" -> 1, "BB" -> 2, "CCC" -> 3)
m = m filterKeys { s => s.length < 3 }
Ne compile. Je reçois l'erreur suivante:
error: type mismatch
found: collection.this.Map.Projection[scala.this.Predef.String,scala.this.Int]
required: collection.this.Map[scala.this.Predef.String,scala.this.Int]
m = m filterKeys { s => s.length < 3 }
Je ne comprends pas vraiment ce que selon la scaladoc un Projection[A,B]
étend le trait Map[A,B+]
. C'est-à-dire, une projection est une carte.
Je pensais que cela pourrait être quelque chose à voir avec le type contravariant B
mais si j'utilise Any
au lieu de Int
, il ne compile toujours pas. Qu'est-ce que je rate? La solution est de faire:
var m: Map[String, Int] = Map("A" -> 1, "BB" -> 2, "CCC" -> 3)
m = Map(m filterKeys { s => s.length < 3 } toSeq : _ *)
mais cela me semble inélégant.
En fait, cela * fonctionne * dans Scala 2.8. –