Eta-Konvertierung für Funktionen
Vielen Dank an Laikoni für diesen Tipp in einer meiner Lösungen .
Stellen Sie sich eine Funktion vor, um beispielsweise eine Zeichenfolge mit 3 für Großbuchstaben und 1 für alle anderen Zeichen zu summieren. So:
let counter input = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1) input
Durch Eta-Konvertierung kann dies wie folgt umgeschrieben werden:
let counter = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
und wie zuvor angerufen:
counter "Hello world!" |> printfn "%i"
Die Funktion zum Weiterleiten der Komposition >>
Angenommen, unsere ursprüngliche Herausforderung besteht darin, eine Zeichenfolge mit 3 für Großbuchstaben und 1 für Kleinbuchstaben zu summieren, und alle anderen Zeichen sind ausgeschlossen.
Wir könnten dies schreiben als:
let counter input = Seq.filter Char.IsLetter input |> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
Wir können den Forward-Composition-Operator ( >>
) verwenden, um die beiden Funktionen ( Seq.filter
und Seq.sumBy
) miteinander zu verketten. Bei der eta-Konvertierung würde die Funktionsdefinition folgendermaßen aussehen:
let counter = Seq.filter Char.IsLetter >> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
Chris Smith hat >>
in seinem MSDN-Blog einen tollen Bericht über den Betreiber verfasst .