immutable.List源代码具有“重新分配给val”错误

时间:2016-09-16 03:16:55

标签: scala intellij-idea

在Scala版本2.11.8中,当我在Intellij中查看源代码时,List类已重新分配给val错误。

例如,在List.map函数源代码中的第278行:

t.tl = nx

IntelliJ显示该行的分析错误,指出已重新分配给val。当我检查源代码时,'t'是一个变量,但'tl'是一个构造函数参数,它被声明为Val。以下是IntelliJ将我引导至tl:

声明的代码片段
package scala.collection.immutable
@scala.SerialVersionUID(value = 509929039250432923)
final case class ::[B](override val head : B, private[scala] val tl : scala.collection.immutable.List[B]) extends scala.collection.immutable.List[B] with scala.Product with scala.Serializable {
  override def tail : scala.collection.immutable.List[B] = { /* compiled code */ }
  override def isEmpty : scala.Boolean = { /* compiled code */ }
}

我认为代码的一部分如下例所示:

class Test(val x: String)

var t: Test = new Test("test")
t.x = "test2"

同样,IntelliJ在赋值t.x =“test2”时显示相同的错误。那么,即使重新分配val错误,源代码的工作原理也是如此。

IntelliJ版本是: IntelliJ IDEA 2016.2.3 Build#IU-162.1812.17,建于2016年8月30日 JRE:1.8.0_40-b26 amd64 JVM:Oracle Corporation的Java HotSpot(TM)64位服务器VM

1 个答案:

答案 0 :(得分:1)

您能否显示声明tl是val的代码段?从List源中,tl是var而不是val

final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] {
  override def tail : List[B] = tl
  override def isEmpty: Boolean = false
}