似乎是 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)
这不是错误,而是一个功能。这称为阴影。
如果你能做到这一点,那真的可能是一个错误:
def testMethod(name: String = "John Smith"): Unit = {
name = "John Doe" // does not compile
println(name)
}
Run Code Online (Sandbox Code Playgroud)
注意name不是 val 并试图将新值重新分配给传入的参数