在scala中的for循环外为变量分配值的用途是什么

时间:2019-01-31 18:08:29

标签: scala for-loop

所以,我正在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是在斯卡拉据了解瓦尔是不可改变和VAR是可变的,为什么它不扔当x值保持在改变错误?

2 个答案:

答案 0 :(得分:1)

Scala的for循环是一种语法糖,可以分解为以下内容(或多或少):

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)

这种语法使x是一个新变量,在函数定义所引入的新范围内,它遮盖了外部x

因此,简而言之,两个x变量完全不同,因为它们具有不同的范围,并且如果在x循环之后打印for,您仍然会得到{{1 }}。

答案 1 :(得分:0)

不仅在scala中,而且在其他编程语言中,局部变量或内部变量也位于外部级别(例如,类/对象)变量之前。

object VarlPrecedence {

  val name = "object level"

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

输出

method level

在您的示例中,内部x用于迭代Range。与您认为外部x仍然是不变的,但未使用。