在scala中为for循环之外的变量赋值有什么用

在scala中为for循环之外的变量赋值有什么用,scala,for-loop,Scala,For Loop,所以,我正在尝试Scala中的循环。代码如下 valx=5 for(x不仅在scala中,而且在其他编程语言中,局部或内部变量优先于外部级别(例如类/对象)变量 object VarlPrecedence { val name = "object level" def main(args: Array[String]): Unit = { val name = "method level" println(name) } } 输出 method level 在

所以,我正在尝试Scala中的循环。代码如下

valx=5

for(x不仅在scala中,而且在其他编程语言中,局部或内部变量优先于外部级别(例如类/对象)变量

object VarlPrecedence {

  val name = "object level"

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

method level

在您的示例中,内部
x
用于在
范围内进行迭代。不像您认为外部
x
仍然是不可变的,但未使用。

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

这(同样本质上)相当于:

val x = 5

val myFunc: Int => Unit = { x =>
  println("the value is" + x)
}

(1 until 10).foreach(myFunc)
该语法更清楚地表明,
x
是一个新的变量,它在函数定义引入的新范围内隐藏外部
x


简而言之,两个
x
变量是完全不同的,因为它们的作用域不同,如果在
for
循环后打印
x
,您仍然会得到
5

您的问题已经说到点子上了。
x
在循环中没有用处,并且始终是
5
的值。但是,for-“理解”引入了一个新的作用域,创建了一个新的
val x
,它在每次迭代中都绑定到连续的值。
val x=5
是死代码,它对任何事情都没有好处。只需移除它,输出将保持不变。问题中没有任何迹象表明第一个
x
是类级变量,以及t是否真的相关重要的是
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)