2016-11-29 2 views
2

Я выполнение ниже 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 принимает эти измененные значения и отпечатки?

ответ

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). На каждой итерации новый с именем a инициализируется элементом numList.

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 хэш начать

значение а: 1 и хэш-1

Значение: с 2 и хэш-2

Значение a: 3 и хэш 3

Значение a: 4 и hash 4

Стоимость: с 5 и хэш 5

Значение: с 6 и хэш-6

9 Хэш конец

С выше вывода, вы можете увидеть хэш начало и конец остается тем же 9 ,

Смежные вопросы