2016-04-13 19 views
1

Angeblich sollte habe ich eine Methode, die einen Standard-Parameter hat. Ich möchte es als Argument einer anderen Methode übergeben. Wie rufe ich die übergebene Methode mit ihrem Standardparameter auf?Aufruf von Methoden mit Standardparametern in scala Funktion höherer Ordnung

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) 

Antwort

1

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 doStuffFunction0 machen akzeptieren, wie Sie es tatsächlich ohne Parameter aufrufen möchten.

def doStuff(printFunc:() => Unit): Unit = { 
    printFunc() 
} 

doStuff(printDefaultNum)