还有另一种方法可以使这项工作吗?
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")
答案 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")
会起作用),这样就可以减少它们的含糊不清。