在 Scala (2.8.1) 中处理重载方法时遇到了一个奇怪的问题,其中第一个是无参数的方法,第二个采用可变数量的参数 (0..N)。测试代码:
class Test {
def method1 = println("method1 invoked with zero args")
def method1(args: Any*) = println("method1 with args " + args)
def method2() = println("method2 invoked with zero args")
def method2(args: Any*) = println("method2 with args " + args)
}
object Test {
def main(args: Array[String]) {
val t = new Test
t.method1
t.method1()
t.method1(1,2,3)
println
t.method2
t.method2()
t.method2(1,2,3)
}
}
通过编译并运行它,输出为:
method1 invoked with zero args
method1 with args WrappedArray()
method1 with args WrappedArray(1, 2, 3)
method2 invoked with zero args
method2 invoked with zero args
method2 with args WrappedArray(1, 2, 3)
因此,如果method1
使用括号和零参数运行,我们将得到 varargs 方法,但在method2
's 的情况下调用无参数方法。
这种奇怪行为背后的解释或推理是什么?