scala – 编译for循环时出现奇怪的错误
发布时间:2020-12-16 18:49:10 所属栏目:安全 来源:网络整理
导读:在我编写一些 Scala代码时,我在尝试编译代码时收到了一条奇怪的错误消息.我将代码分解为一个更简单的代码(从语义的角度来看根本没有任何意义,但仍然显示错误). scala :paste// Entering paste mode (ctrl-D to finish)import scala.collection.mutable.ListB
在我编写一些
Scala代码时,我在尝试编译代码时收到了一条奇怪的错误消息.我将代码分解为一个更简单的代码(从语义的角度来看根本没有任何意义,但仍然显示错误).
scala> :paste // Entering paste mode (ctrl-D to finish) import scala.collection.mutable.ListBuffer val map = scala.collection.mutable.Map[Int,ListBuffer[Int]]() for (i <- 1 to 2) { map.get(0) match { case None => map += (1 -> ListBuffer[Int](1)) case Some(l: ListBuffer[Int]) => l += i } } // Exiting paste mode,now interpreting. <console>:12: error: type arguments [Any] do not conform to trait Cloneable's t pe parameter bounds [+A <: AnyRef] for (i <- 1 to 2) { ^ 在for循环的末尾添加额外的行时,代码可以工作: scala> :paste // Entering paste mode (ctrl-D to finish) import scala.collection.mutable.ListBuffer val map = scala.collection.mutable.Map[Int,ListBuffer[Int]]() for (i <- 1 to 2) { map.get(0) match { case None => map += (1 -> ListBuffer[Int](1)) case Some(l: ListBuffer[Int]) => l += i } 1 // <- With this line it works } // Exiting paste mode,now interpreting. warning: there were 1 unchecked warnings; re-run with -unchecked for details import scala.collection.mutable.ListBuffer map: scala.collection.mutable.Map[Int,scala.collection.mutable.ListBuffer[Int]] = Map(1 -> ListBuffer(1)) 我猜,它与match-case-statement的返回值有关.但我不是Scala专家,足以弄清楚这个错误信息背后的原因以及我做错了什么.我希望,更聪明的人可以在这里提供帮助. 错误消息背后的原因是什么? match-case-statement有什么问题? 更新:使用Scala 2.9.2进行测试 解决方法
你看到
this bug在行动.它已在2.10中修复,并且在
this answer中有一个简单的解决方法 – 只需在某处添加类型注释:
for (i <- 1 to 2) { map.get(0) match { case None => map += (1 -> ListBuffer[Int](1)) case Some(l: ListBuffer[Int]) => (l += i): Unit } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |