2016-11-07 1 views
6

Ich arbeite an einem Projekt und ich möchte eine sehr kompakte Methode zum Erstellen von Entitäten und Attributen erstellen.Kombinieren Sie Funktionalität und Pipeline-Operator in F #

Ich möchte dies mit dem Pipelinebetreiber tun. Aber ich möchte diesem Operator zusätzliche Funktionalität hinzufügen.

Wie zum Beispiel:

let entity = (entity "name") 
       |>> (attribute "attr" String) 
       |>> (attribute "two" String) 

In diesem Beispiel | >> wäre ein Pipeline-Betreiber mit der Funktionalität sein zusammen ein Attribut der Entität hinzuzufügen.

Ich weiß, dass dies funktioniert:

let entity = (entity "name") 
      |> addAttr (attribute "attr" String) 

Also, was ich wissen will, ist, wenn es möglich ist

|> addAttr 

mit

|>> 

Danke für die Hilfe zu ersetzen

(ich nicht wissen, ob dies überhaupt möglich ist)

Antwort

9

Sie einfach es wie folgt definieren:

let (|>>) e a = e |> addAttr a 
+0

das funktioniert, danke! – BrechtL

4

Zur besseren Lesbarkeit würde ich dringend abraten benutzerdefinierte Operatoren hinzuzufügen, wenn eine einfache Funktion zu tun. Sie könnten die Art ändern, wie addAttr geschrieben wird, um es einfacher zu machen, in einer Pipeline zu verwenden:

let addAttr name attrType entity =() // return an updated entity 

let e = 
    entity "name" 
    |> addAttr "attr" String 
    |> addAttr "two" String 
+1

Sie haben einen Punkt, ich suche immer noch verschiedene Möglichkeiten. Und einer von ihnen wird mit benutzerdefinierten Operatoren sein und ein anderer wird etwas in der Richtung sein, wie Sie es gesagt haben. – BrechtL

Verwandte Themen