我正在执行下面的 Scala 代码,它成功执行,没有任何编译时错误,并且还给出了下面给出的输出:
val a = 0;
val numList = List(1,2,3,4,5,6);
// for loop execution with a collection
for( a <- numList ){
println( "Value of a: " + a );
}
输出:
Value of a: 1
Value of a: 2
Value of a: 3
Value of a: 4
Value of a: 5
Value of a: 6
我的问题是,如果a
的类型是val
,那么在for
循环中为什么a
的值会得到循环的每次迭代中都会发生变化,并且 a
接受这些更改的值并打印?
最佳答案
for
循环中使用的 a
是一个不同的变量,它遮蔽了外部 a
。
查看两个变量不同的一种方法是在循环后打印 a
的值。它仍然包含初始值(在您的情况下为 0)。
val a = 0;
val numList = List(1,2,3,4,5,6);
// for loop execution with a collection
for( a <- numList ){
println( "Value of a: " + a );
}
println("After the loop, a = " + a)
输出:
Value of a: 1
Value of a: 2
Value of a: 3
Value of a: 4
Value of a: 5
Value of a: 6
After the loop, a = 0
请注意,内部的 a
也是一个 val
(而不是 var
)。在每次迭代中,都会使用 numList
元素初始化一个名为 a
的新 val
。
关于scala - scala for 循环中 val 的不良行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860218/