我在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
的值会在循环的每次迭代中发生变化{{1}接受那些改变的值和打印?
答案 0 :(得分:2)
a
循环中使用的for
是一个不同的变量,它会遮蔽外部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
)。在每次迭代中,使用val
元素初始化名为a
的新numList
。
答案 1 :(得分:0)
val a = 0;
与中用于理解的a
不同。 中用于理解的变量是临时变量。您可以通过检查a
值
val a = 9;
val numList = List(1, 2, 3, 4, 5, 6);
println(a.## + " hash start")
// for loop execution with a collection
for (a <- numList) {
println("Value of a: " + a + " and \t hash "+a.##);
}
println(a.## + " hash end")
9哈希开始
a的值:1和散列1
a:2和hash 2
的值a:3和hash 3的值
a:4和hash 4
的值a的值:5和哈希5
a的值:6和hash 6
9哈希结束
从上面的输出中,您可以看到哈希开始和结束保持相同9
。