Scala中默认的第一个参数

时间:2011-04-26 16:39:57

标签: scala default

还有另一种方法可以使这项工作吗?

def b(first:String="hello",second:String) = println("first:"+first+" second:"+second)

b(second="geo")

如果我只用以下方法调用方法:

b("geo")

我明白了:

<console>:7: error: not enough arguments for method b: (first: String,second: String)Unit.
Unspecified value parameter second.
       b("geo")

3 个答案:

答案 0 :(得分:5)

以下是一种可能的方法:您可以使用多个参数列表和currying:

scala> def b(first:String="hello")(second:String) = println("first:"+first+" second:"+second)
b: (first: String)(second: String)Unit

scala> b()("Scala")
first:hello second:Scala

scala> val c = b() _
c: (String) => Unit = <function1>

scala> c("Scala")
first:hello second:Scala

答案 1 :(得分:3)

请参阅scala语言规范6.6.1(http://www.scala-lang.org/docu/files/ScalaReference.pdf):

“命名参数形成参数列表e1,...,em的suf fi x,即没有位置参数跟随命名参数。”

答案 2 :(得分:2)

提供单个字符串参数(不指定它)对于编译器来说太模糊了。 可能你的意思是非默认参数的值,但是......也许不是。所以编译器希望你更具体。

通常,您将所有默认参数放在方法签名的末尾(如果您在这种情况下执行,b("geo")会起作用),这样就可以减少它们的含糊不清。