2016-09-10 4 views

Antwort

5

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 ((|>)()) 
+0

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

+0

@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. –

+0

@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

Verwandte Themen