访问依赖于要填充的列表缓冲区的常量 Scala

Accessing Constants which rely on a list buffer to be populated Scala

遇到一个问题,我在 scala 步骤定义文件的开头指定私有常量,该文件依赖于要填充的列表缓冲区元素,但是在编译时我得到一个 'IndexOutOfBoundsException',因为列表是空的最初并且只会在稍后的 for 循环中填充。 例如,我有以下 2 个常量:

private val ConstantVal1= globalExampleList(2)
private val ConstantVal2= globalExampleList(3)

globalExampleList 使用 for 循环在文件中进一步填充:

 for (i <- 1 to numberOfW) {
    globalExampleList += x.xy }

此列表缓冲区向全局可变 ListBuffer 添加所需数量的值。

有没有更好的方法来声明这些常量?我试图在 for 循环之后声明它们,但其他方法无法访问它们。我在同一个文件中有大约 4 种不同的方法,它们使用这些值,而不是每次都通过索引访问它,我认为最好将它们声明为常量,以便在需要更改时保持整洁和高效。

谢谢

您可以使用默认值创建必要大小的列表缓冲区并稍后填充它:

val globalExampleList: ListBuffer[Int] = ListBuffer.fill(numberOfW)(0)

for (i <- 0 until numberOfW) {
  globalExampleList(i) = x.xy 
}

ConstantVal1ConstantVal2仍将具有原始默认值。因此,您可以使它们成为 var 并在填充缓冲区后重新分配它们。

您的代码似乎有很多突变和副作用。

您有 2 条路可走。 首先你可以使用 lazy 修饰符

private lazy val ConstantVal1= globalExampleList(2)
private lazy val ConstantVal2= globalExampleList(3)

或者你可以在for循环之后写两行。

val globalExampleList = XXXX
for (i <- 1 to numberOfW) { globalExampleList += x.xy }
private val ConstantVal1= globalExampleList(2)
private val ConstantVal2= globalExampleList(3)