使用显式默认参数调用Scala函数

时间:2017-06-26 09:37:19

标签: scala default-value

Scala中有没有办法明确告诉函数你想使用默认参数?

实施例

func didFinishTask(progress: Double){
    // set up status bar here
}

是否可以将def myFunction(default : Int = 0) { /* logic */ } myFunction(number match { case 5 => 5 case _ => ??? }) 替换为默认调用函数的东西? (当然,我可以用???替换,但为了简单起见假设这个例子)

由于

2 个答案:

答案 0 :(得分:3)

 number match {
    case 5 => myFunction(5)
    case _ => myFunction()
 }

我认为您可以通过模式匹配功能调用来实现。

答案 1 :(得分:3)

正确的方式是@chengpohi建议的。完全按照你的要求做的唯一方法是搞乱scalac如何在引擎盖下实现默认参数:

myFunction(number match {
  case 5 => 5
  case _ => myFunction$default$1
})

但这是非常不推荐的。

另外请注意,在REPL中粘贴而不适应时,这可能不起作用,因为REPL将内容包装在其他对象中,您必须知道myFunction$default$1的绝对路径。要在REPL中测试它,你必须将它包装在一个对象或类中:

scala> object Foo {
     |   def myFunction(a: Int = 0) = println(a)
     | 
     |   val number = 42
     |   myFunction(number match {
     |     case 5 => 5
     |     case _ => myFunction$default$1
     |   })
     | }
defined object Foo

scala> Foo
0
res5: Foo.type = Foo$@2035f1f0