我刚刚发现了一个错误,它是通过自动重命名IntelliJ IDEA中的方法参数引入的。结果是,参数在方法体内被一个同名的本地val遮蔽,如下所示:
def foo(arg: Int): Int = {
val arg = 1
arg
}
assert(foo(2)) // fail
(更糟糕的是,由于我用来比较值的类型不安全==
,编译器并没有引起怀疑。)
Scala是否允许通过方法体顶层的值隐藏方法参数?
编辑:还有一个编译器选项可以用来避免这些事情发生吗?
答案 0 :(得分:0)
似乎函数参数被认为是来自更高级别的范围。
当然有点反直觉。但是,如果你写的有点不同,它可能会有点意义:
def foo = { (arg: Int) =>
val arg = 1
arg
}