我对编程比较陌生,很享受使用Scala自学。我遇到了一个我似乎无法解决的问题。
以下是我正在努力解决的代码片段。使用的所有地图都是可变的.Map [String,Any]
def CreateCompleteVoterSet(): Set[String] =
{
val firstSet = concedeVoterMap.keySet.diff(voterMap.keySet)
val secondSet = emoteVoterMap.keySet.diff(voterMap.keySet)
val thirdSet = speedVoterMap.keySet.diff(voterMap.keySet)
var finalSet = voterMap.keySet ++ firstSet ++ secondSet ++ thirdSet
return finalSet
}
它给我的错误是:scala.collection.Set类型的表达式[scala.Predef.String]不符合预期类型scala.Predef.Set [scala.Predef.String]
我确信我可以找到一些方法强制它使用相同类型,可能使用toSet(),但我对错误是什么感到困惑。有人能给我一些关于错误发生原因的见解,并指出我正确的方向来找到一个安全的方法吗?
答案 0 :(得分:3)
由于Set
没有导入,Set[String]
表示scala.Predef.Set
(scala.Predef._
会自动导入所有Scala文件中)。这是scala.collection.immutable.Set
的别名。但keySet
的{{1}}方法会返回scala.collection.mutable.Map
,这是scala.collection.Set
(以及scala.collection.immutable.Set
的超类型,与问题无关) 。将scala.collection.mutable.Set
与scala.collection.Set
结合使用仍会为您提供++
。
简单的解决方案是将返回类型更改为scala.collection.Set
,除非您出于其他原因实际需要scala.collection.Set
。