какая польза от присвоения значения переменной вне цикла for в Scala - PullRequest
0 голосов
/ 31 января 2019

Итак, я пытаюсь зациклить в Scala.Код ниже

val x = 5
for (x <- 1 until 10) {
  println("the value is"  + x)
}

Вывод

the value is1
the value is2
the value is3
the value is4
the value is5
the value is6
the value is7
the value is8
the value is9

Мой вопрос 1 заключается в том, что он повторяется в цикле от 1 до 10. Какая польза от x = 5 тогда?Мой вопрос 2, насколько я понимаю, в scala Val является неизменным, а var изменяемым, так почему он не выдает ошибку, когда значение x продолжает изменяться?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Цикл 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.

0 голосов
/ 31 января 2019

не только в Scala, но и в других языках программирования, а также локальная или внутренняя переменная предшествует переменной внешнего уровня (например, класс / объект).

object VarlPrecedence {

  val name = "object level"

  def main(args: Array[String]): Unit = {
    val name = "method level"
    println(name)
  }
}

output

method level

InВ вашем примере, внутренний x используется для итерации по Range.В отличие от вас, вы думаете, что внешний x все еще неизменен, но не используется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...