为什么使用默认参数调用方法需要括号?

Ste*_*man 5 scala

我有一个带有默认参数的无副作用的方法,我想在没有括号的情况下调用,例如:

scala> def foo(x: Int = 1) = 42
foo: (x: Int)Int

scala> foo
<console>:9: error: missing arguments for method foo in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
              foo
              ^

scala> foo()
res3: Int = 42
Run Code Online (Sandbox Code Playgroud)

这是故意的还是暂时的限制?

Rex*_*err 9

这可能是有意的,所以你不会让参数块消失在你身上:

def foo(x: Int = 2)(y: Int = 4) = x*y

foo(3)    // What does this mean???
Run Code Online (Sandbox Code Playgroud)

  • 作为一种解决方法,您可以编写另一种方法:`def foo(x:Int = 1)= 42; def foo:Int = foo()` (5认同)