我有以下代码,并且在
if在方法hideVariableFromOuterBlock中,我声明了一个变量k,它隐藏在外部块中定义的变量。hideParameterName中,我声明了一个变量k,它用相同的名称隐藏参数。object Test extends App {
def hideVariableFromOuterBlock() = {
var k = 2457
if (k % 2 != 0) {
var k = 47
println(k) // this prints 47
//println(outer k)
}
println(k) // - this prints 2457 as expected
}
def hideParameterName(k: Int) = {
var k = 47
println(k) // this prints 47
//println(parameter k)
}
hideVariableFromOuterBlock()
hideParameterName(2457)
}在我对变量或参数k进行隐藏的块中是否有任何方法来访问阴影值(来自外部块的变量)?
我知道这不是一个好做法,我永远不会这样做。我提出这个问题是为了教育目的。
我做了一些研究,但没有找到明确的解释。我可以清楚地发现/看到隐藏发生了,但没有发现来自外部块的变量不能再被访问的明确解释。
我是斯卡拉的新手。
发布于 2015-06-26 10:04:13
This的答案首先讨论了为什么允许隐藏。
至于一种访问隐藏值的方法,据我所知,最简单的方法就是重命名内部变量,然后问题就解决了。我想,为了练习,如果您真的不想重命名任何东西,您可以将外部变量赋值给一个具有不同名称的新变量。
var k = 2457
val outer_k = k
if (k % 2 != 0) {
var k = 47
println(k) // this prints 47
println(outer_k)
}https://stackoverflow.com/questions/31070212
复制相似问题