在scala中,是否可以为作为函数的参数提供默认值?
例如,在我的代码中,我有类似的东西。
def noop(): Unit = {}
def doSomethingGreat(succeed: Boolean)(f: => Unit)(default: => Unit = noop): Unit = {
if (success) {
f
} else {
default
}
}
当我尝试调用doSomethingGreat并且我省略了一个默认参数时,我得到一个错误,说我没有传入足够的参数。有什么帮助吗?
到目前为止,我的解决方法是显式传入一个no-op函数作为第三个参数,但是这首先违背了默认值的目的......
答案 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 _
,以正确引用此类函数定义。