据说我有一个有一个默认参数的方法。我想将它作为参数传递给另一个方法。如何使用默认参数调用传入方法?
def printNum(i: Int = 4): Unit = {
println(i)
}
def doStuff(printFunc: (Int) => Unit): Unit = {
// How to call printFunc with its default parameter
printFunc()
}
doStuff(printNum)
答案 0 :(得分:1)
恐怕你做不到。默认参数是方法的属性,就像命名参数和类似的东西一样。当您将其作为函数传递时,它将通过eta扩展转换为函数,并且函数不具有默认参数。
看看这个:
def doStuff(printFunc: Int => Unit): Unit = ???
这是一个期望函数Int => Unit
,任何函数Int => Unit
的方法。因此,如果您可以传递任意函数,编译器将如何知道它具有默认参数。
您可以考虑为Function
创建一个包含默认值和重载apply
方法的包装器。但是从方法中提取默认参数以使其透明仍然不容易。
您可以轻松地创建另一种方法
def printDefaultNum(): Unit = {
printNum(4)
}
让doStuff
接受Function0
,因为您实际上想要在没有参数的情况下调用它。
def doStuff(printFunc: () => Unit): Unit = {
printFunc()
}
doStuff(printDefaultNum)