Scala中使用var关键字

时间:2019-05-07 23:27:06

标签: scala

我不太了解以下情况:

object Social extends App {

def add(repo: Map[String, Set[String]], name: String) =
    repo + (name -> Set())

var r = Map[String, Set[String]]()

println(add(r, "Jim"))

这样,一切都很好。 但是,如果我尝试重新影响r,则该程序不再编译:

var r = Map[String, Set[String]]()
r = add(r, "Jim") // problem

println(add(r, "Jim"))

现在存在类型不匹配:

[error] /Users/pom/workspace/coursera/example/src/main/scala.     /example/Social.scala:7: type mismatch;
[error]  found   : scala.collection.immutable.Map[String,scala.collection.immutable.Set[_ <: String]]
[error]  required: scala.collection.immutable.Map[String,Set[String]]

为什么推理会改变?

1 个答案:

答案 0 :(得分:4)

有时编译器无法弄清空集合的预期类型。

这将解决它。

repo + (name -> Set.empty[String])