Ich fürchte, Sie können nicht. Standardparameter sind Eigenschaften von Methoden, genau wie benannte Argumente und ähnliche Dinge. Wenn Sie es als Funktion übergeben, wird es in die Funktion mit eta-Erweiterung konvertiert und Funktionen haben keine Standardparameter.
Schauen Sie sich nur diese:
def doStuff(printFunc: Int => Unit): Unit = ???
Es ist eine Methode, die Funktion erwartet Int => Unit
, jede Funktion Int => Unit
. Wenn Sie also eine beliebige Funktion übergeben können, weiß der Compiler, dass er einen Standardparameter hat.
Sie könnten einen Wrapper für Function
erstellen, der einen Standardwert hat und apply
überladen ist. Es ist jedoch immer noch nicht einfach, das Standardargument aus der Methode herauszuziehen, um es transparent zu machen.
Was Sie easly tun können, ist eine andere Methode erstellen
def printDefaultNum(): Unit = {
printNum(4)
}
Und doStuff
Function0
machen akzeptieren, wie Sie es tatsächlich ohne Parameter aufrufen möchten.
def doStuff(printFunc:() => Unit): Unit = {
printFunc()
}
doStuff(printDefaultNum)