Я боюсь, что вы не можете. Параметр по умолчанию - это свойство методов, подобно именованным аргументам и тому подобным. Когда вы передаете его как функцию, он преобразуется в функцию с расширением 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)