访问依赖于要填充的列表缓冲区的常量 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
}
但ConstantVal1
、ConstantVal2
仍将具有原始默认值。因此,您可以使它们成为 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)
遇到一个问题,我在 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
}
但ConstantVal1
、ConstantVal2
仍将具有原始默认值。因此,您可以使它们成为 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)