【发布时间】:2015-06-26 09:56:38
【问题描述】:
我有以下代码,以及 2 种情况 里面
-
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 的块中是否有任何方法可以访问被隐藏的值(来自外部块的变量)?
我知道这不是一个好习惯,我永远不会那样做。我问这个问题是为了教育目的。
我做了一些研究,但没有找到明确的解释。我可以清楚地发现/看到发生了阴影,但没有明确解释无法再访问外部块中的变量。
我是 Scala 的新手。
【问题讨论】:
-
我首先要说
var在惯用的 Scala 中不是最有趣的。 -
我同意你的看法,据我研究,至少
_比var和其他东西更有趣。 -
我的意思是更惯用的解决方案往往会避免可变值。
标签: scala