Цикл for
в Scala является синтаксическим сахаром, который десугарен до следующего (более или менее):
val x = 5
(1 until 10).foreach { x =>
println("the value is" + x)
}
Что (опять по существу) эквивалентно:
val x = 5
val myFunc: Int => Unit = { x =>
println("the value is" + x)
}
(1 until 10).foreach(myFunc)
Thisсинтаксис немного проясняет, что x
- это новая переменная, которая затеняет внешнюю x
в новой области видимости, введенной определением функции.
Короче говоря, две x
переменные полностьюразные, потому что у них разные области видимости, и если вы напечатаете x
после цикла for
, вы все равно получите 5
.