Scala - 方法变量不是不可变的

Ade*_*nde -1 jvm scala

似乎是 Scala 中的一个错误,它允许您更改方法变量名称。

在此示例中,编译器不应允许name在同一方法块中再次声明该参数。

object App {

  def main(args: Array[String]): Unit = {
    testMethod()
  }

  def testMethod(name: String = "John Smith"): Unit = {
    val name = "John Doe"
    println(name)
  }

}
Run Code Online (Sandbox Code Playgroud)

对方法变量名的变异有什么解释吗?

输出

John Doe
Run Code Online (Sandbox Code Playgroud)

Pri*_*dam 8

这不是错误,而是一个功能。这称为阴影

如果你能做到这一点,那真的可能是一个错误:

def testMethod(name: String = "John Smith"): Unit = {
  name = "John Doe" // does not compile
  println(name)
}
Run Code Online (Sandbox Code Playgroud)

注意name不是 val 并试图将新值重新分配给传入的参数