Übergeben Sie Funktionen in F#
-
09-06-2019 - |
Frage
Ist es möglich, in F# einen Verweis auf eine Funktion an eine andere Funktion zu übergeben?Insbesondere möchte ich Lambda-Funktionen wie übergeben
foo(fun x -> x ** 3)
Genauer gesagt muss ich wissen, wie ich in einer Funktion, die ich selbst geschrieben habe, auf die übergebene Funktion verweisen würde.
Lösung
Ja, es ist möglich.Der Handbuch hat dieses Beispiel:
> List.map (fun x -> x % 2 = 0) [1 .. 5];;
val it : bool list
= [false; true; false; true; false]
Andere Tipps
Funktionen sind erstklassige Bürger in F#.Sie können sie daher nach Belieben weitergeben.
Wenn Sie eine Funktion wie diese haben:
let myFunction f =
f 1 2 3
Und F ist Funktion dann der Rückgabewert von meineFunktion Ist F angewendet auf 1,2 und 3.
Die Übergabe einer Lambda-Funktion an eine andere Funktion funktioniert folgendermaßen:
Angenommen, wir haben eine eigene triviale Funktion wie folgt:
let functionThatTakesaFunctionAndAList f l = List.map f l
Jetzt können Sie eine Lambda-Funktion und eine Liste daran übergeben:
functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]
Innerhalb unserer eigenen Funktion functionThatTakesaFunctionAndAList
Sie können die Lambda-Funktion einfach als bezeichnen f
weil Sie Ihren ersten Parameter aufgerufen haben f
.
Das Ergebnis des Funktionsaufrufs ist natürlich:
float list = [1.0; 8.0; 27.0]