Scala默认函数文字参数

时间:2014-08-18 22:45:47

标签: scala default-parameters function-parameter

在scala中,是否可以为作为函数的参数提供默认值?

例如,在我的代码中,我有类似的东西。

def noop(): Unit = {}

def doSomethingGreat(succeed: Boolean)(f: => Unit)(default: => Unit = noop): Unit = {
  if (success) {
    f
  } else {
    default
  }
}

当我尝试调用doSomethingGreat并且我省略了一个默认参数时,我得到一个错误,说我没有传入足够的参数。有什么帮助吗?

到目前为止,我的解决方法是显式传入一个no-op函数作为第三个参数,但是这首先违背了默认值的目的......

2 个答案:

答案 0 :(得分:1)

您只需要在方法调用中添加括号,scala将选择默认函数:

scala>  def noop(): Unit = { println(567) }
noop: ()Unit

scala>   def doSomethingGreat(succeed: Boolean)(f: => Unit)(default: => Unit = noop): Unit = {
     |     if (succeed) {
     |       f
     |     } else {
     |       default
     |     }
     |   }
doSomethingGreat: (succeed: Boolean)(f: => Unit)(default: => Unit)Unit

scala>   doSomethingGreat(succeed = true)(println(123))()
123

scala>   doSomethingGreat(succeed = false)(println(123))()
567

答案 1 :(得分:-1)

在代码中尝试noop _,以正确引用此类函数定义。