13 Stimmen

Funktion Anwendungsoperator ($) in F#?

Nehmen wir an, ich habe folgenden Code

let identifier = spaces_surrounded (many1Satisfy isLetter)

Ich habe mich gefragt, ob es irgendeine systemeigene F#-Funktion gibt, die es mir erlaubt, sie zu refaktorieren

let identifier = spaces_surrounded $ many1Satisfy isLetter

das heißt, etwas wie

let ($) f1 f2 = f1 (f2)

(das heißt, wenn ich mich nicht irre, sind meine Haskell-Kenntnisse nicht allzu scharf ).

20voto

John Palmer Punkte 25180

Das Standard-F#-Idiom dafür ist der Forward-Pipe-Operator |> wo Sie umschreiben würden

let identifier = spaces_surrounded (many1Satisfy isLetter)

als

let identifier = many1Satisfy isLetter |> spaces_surrounded 

können Sie auch den Backward-Pipe-Operator verwenden <| wenn Sie die ursprüngliche Reihenfolge beibehalten wollen, was jedoch seltener der Fall ist

let identifier = spaces_surrounded <| many1Satisfy isLetter

0 Stimmen

Hmm, es scheint, dass <| das ist, wonach ich gesucht habe. Was ist seine Definition?

6 Stimmen

Sie ist let inline (<|) f x = f x wie hier zu sehen: github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/

3 Stimmen

Beachten Sie, dass die Definition eigener Operatoren a la Haskell den F#-Regeln der Assoziativität/Präzensierung unterliegt, siehe z. B. research.microsoft.com/de-us/um/cambridge/projects/fsharp/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X