scala.collection.Set [scala.Predef.String]类型的表达式不符合预期类型scala.Predef.Set [scala.Predef.String]

时间:2016-08-23 20:14:53

标签: scala types compiler-errors

我对编程比较陌生,很享受使用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(),但我对错误是什么感到困惑。有人能给我一些关于错误发生原因的见解,并指出我正确的方向来找到一个安全的方法吗?

1 个答案:

答案 0 :(得分:3)

由于Set没有导入,Set[String]表示scala.Predef.Setscala.Predef._会自动导入所有Scala文件中)。这是scala.collection.immutable.Set的别名。但keySet的{​​{1}}方法会返回scala.collection.mutable.Map,这是scala.collection.Set(以及scala.collection.immutable.Set的超类型,与问题无关) 。将scala.collection.mutable.Setscala.collection.Set结合使用仍会为您提供++

简单的解决方案是将返回类型更改为scala.collection.Set,除非您出于其他原因实际需要scala.collection.Set