以下代码:
var m: Map[String, Int] = Map("A" -> 1, "BB" -> 2, "CCC" -> 3)
m = m filterKeys { s => s.length < 3 }
不编译。我收到以下错误:
错误:发现类型不匹配
:collection.this.Map.Projection[scala.this.Predef.String,scala.this.Int]
必需:collection.this.Map[scala.this.Predef.String,scala.this.Int]
m = m filterKeys { s => s.length < 3 }
我真的不明白这一点,因为根据scaladoc a Projection[A,B]
extends the trait Map[A,B+]
。也就是说,Projection 是 Map。
我认为这可能与逆变类型有关,B
但如果我使用Any
而不是Int
,它仍然无法编译。我错过了什么?解决办法是:
var m: Map[String, Int] = Map("A" -> 1, "BB" -> 2, "CCC" -> 3)
m = Map(m filterKeys { s => s.length < 3 } toSeq : _ *)
但这对我来说似乎很不雅。