Wahrscheinlich ein Neuling Frage aufruft, aber gibt es eine Standardfunktion wieF # Standardfunktion, die ihr Argument
let apply f = f()
in F #?
Wahrscheinlich ein Neuling Frage aufruft, aber gibt es eine Standardfunktion wieF # Standardfunktion, die ihr Argument
let apply f = f()
in F #?
Nein, dafür gibt es keine Standardfunktion.
In den meisten Fällen nur die Funktion aufrufen kürzer und deutlicher als apply
Verwendung wäre, so dass ich bin mir nicht ganz sicher, wie dies nützlich wäre:
foo()
apply foo
Jetzt können Sie auch Applikation schreiben |>
verwenden, aber das ist nicht sehr schön entweder:
() |> foo
ich der einzige Ort, erraten, wo apply
nützlich wäre, ist:
functions |> List.map apply
functions |> List.map (fun f -> f())
Hier ist die Version ohne apply
kürzer, aber ich denke nicht, dass es sich lohnt, eine benannte Funktion in der Bibliothek nur für diesen einen Anwendungsfall zu haben.
könnten Sie eigentlich |>
hier fun
zu vermeiden, die für ein schönes Stück ASCII-Kunst :-) macht, aber nicht für etwas, das ich je in meiner Code-Basis sehen möchte:
functions |> List.map ((|>)())
Mein Einsatz Fall: Ich habe eine Liste von Funktionen in 'Regeln' und suche dann nach einer ersten Übereinstimmung mit' Regeln |> List.choose apply |> List.tryHead' – Mikhail
@Mikhail Wenn Sie eine Liste von Funktionen haben, die Einheit ('() ') als Eingabe, aber jedes Mal, wenn Sie sie aufrufen, unterschiedliche Ergebnisse liefern, dann sind diese Funktionen nicht [pure] (https://en.wikipedia.org/wiki/Pure_function). In der funktionalen Programmierung sollten Sie möglichst reine Funktionen bevorzugen, damit vielleicht ein funktionaleres Design möglich ist. –
@MarkSeemann Sie sind rein. Ich erstelle die Liste der Regeln, indem ich teilweise Argumente auf viele Funktionen anwende, die als letztes Argument 'Einheit' haben. Denken Sie an 10 verschiedene Regeln, von denen jede unterschiedliche Parameter hat. Ich wende diese Parameter an, lege sie in eine Liste und suche dann nach einer ersten Funktion, die ein 'Some'-Ergebnis liefert. 'Einheit' ist nur eine Möglichkeit, den Funktionsaufruf faul zu machen. – Mikhail