加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读