【发布时间】:2010-10-31 06:13:28
【问题描述】:
以下代码:
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
我不太明白这一点,因为根据scaladoc 一个 Projection[A,B] 扩展了特征 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 : _ *)
但这对我来说似乎很不雅。
【问题讨论】:
标签: scala maps projection