所以,我正在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值保持在改变错误?
答案 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
仍然是不变的,但未使用。