【发布时间】:2012-11-22 16:53:49
【问题描述】:
说我有一个函数
def f(a:Int = 0, b:String = "", c:Float=0.0, foos: Foo*) { ... }
注意某些参数使用默认参数。通常,要使用默认值,您可以调用带有命名参数的函数,如下所示:
val foo = Foo("Foo!")
f(foos = foo)
此语法有效,因为我只使用一个foo 调用该方法。但是,如果我有两个或更多
val foo1 = Foo("Foo!")
val foo2 = Foo("Bar!")
f(foos = ...)
这里应该输入什么并不那么明显。 Seq(foo1,foo2) 和 Seq(foo1,foo2):_* 不进行类型检查。
还有,我怎么称呼它no foos?
// All out of foos!
f(foos = ...)
对于这种情况,使用空括号 (f()) 调用函数不起作用。
谢谢!
【问题讨论】:
-
你使用的是什么版本的scala?在 2.9.2 中尝试在 REPL 中定义 f 给了我一个“
:9: error: a parameter section with a `*'-parameter is not allowed to have default arguments” -
我也在 2.9.2 上看到了这个。但是,我正在编译的实际代码运行的是 2.9.1,这显然是合法的。
标签: scala variadic-functions keyword-argument