0

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

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

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

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

此 List Buffer 将所需的值添加到全局可变 ListBuffer 中。

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

谢谢

4

2 回答 2

1

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

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

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

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

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

于 2017-10-15T18:15:54.593 回答
1

你有 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)
于 2017-10-16T00:48:48.200 回答