1
我刚刚发现了一个在IntelliJ IDEA中自动重命名方法参数引入的bug。其结果是,争论是由同名的本地VAL方法体内的阴影,就像这样:为什么方法体中的顶级val在Scala中影响方法参数?
def foo(arg: Int): Int = {
val arg = 1
arg
}
assert(foo(2)) // fail
(更糟糕的是,编译器并没有因为得到可疑类型不安全==
,我用来比较这个值)。
是否有任何可能的为什么Scala会允许通过方法体的顶层的值来影响方法参数?
编辑:是否有一个编译器选项,我可以用来避免这些事情发生?
我的猜测是,这是允许的“方便”的人从Java的未来在那里方法的参数可以被重新分配。 – ghik
但是你不能'val arg = arg + 1',所以我在这里没有看到任何方便...... –
Scala允许一般的阴影;它并没有真正选择和选择阴影是和不被允许的特殊情况。至少,我想不出任何情况。 –