gpt4 book ai didi

scala - 在 for 循环和条件语句中添加到 scala 映射

转载 作者:行者123 更新时间:2023-12-03 03:55:20 26 4
gpt4 key购买 nike

我收到一条错误消息“错误:类型参数 [Any] 不符合特征 Cloneable 的类型参数边界 [+A <: AnyRef]”,我对此一无所知。

具体来说,

var M = mutable.Map[Int, mutable.Set[Int]]()
for(i <- 1 to 100; j <- 1 to 100) {
if(!M.contains(i)) {M += i -> mutable.Set[Int](j)}
else {M(i) += j}
}

(我实际上正在尝试更复杂的东西,但这是错误生成代码调整并简化到最低限度)

上述代码的最后一行生成错误消息。如果我进一步剥离它

for(i <- 1 to 100; j <- 1 to 100) {
if(!M.contains(i)) {M += i -> mutable.Set[Int](j)}
}

它有效!

如何使上面的代码工作?

最佳答案

Digal 诊断了该问题(未能统一 if-else 分支的类型),看起来像是一个编译器错误。这是一个进一步简化的情况,经过漫长的编译时间后,它将在 REPL 中给出错误,

if (true) {
null: collection.mutable.Map[Int, Int]
} else {
null: collection.mutable.Set[Int]
}

与此同时,您可以使用 if-else 语句中某处的显式类型来编译代码,

for(i <- 1 to 100; j <- 1 to 100) {
if(!M.contains(i)) {M += i -> mutable.Set[Int](j)}
else {M(i) += j}: Unit
}

我在这里提交了一个问题:https://issues.scala-lang.org/browse/SI-4938

关于scala - 在 for 循环和条件语句中添加到 scala 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7155066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com