2016-09-29 3 views
5

Gibt es eine Möglichkeit, ein Muster in F # zu kapseln?Gibt es eine Möglichkeit, ein Muster in F # zu kapseln?

Zum Beispiel, statt diese zu schreiben ...

let stringToMatch = "example1" 

match stringToMatch with 
| "example1" | "example2" | "example3" -> ... 
| "example4" | "example5" | "example6" -> ... 
| _ -> ... 

Gibt es irgendeine Weise etwas in dieser Richtung zu erreichen ...

let match1to3 = | "example1" | "example2" | "example3" 
let match4to6 = | "example4" | "example5" | "example6" 

match stringToMatch with 
| match1to3 -> ... 
| match4to6 -> ... 
| _ -> ... 

Antwort

6

Sie können dies mit Active Patterns:

let (|Match1to3|_|) text = 
    match text with 
    | "example1" | "example2" | "example3" -> Some text 
    | _ -> None 

let (|Match4to6|_|) text = 
    match text with 
    | "example4" | "example5" | "example6" -> Some text 
    | _ -> None 

match stringToMatch with 
| Match1to3 text -> .... 
| Match4to6 text -> .... 
| _ -> ... 
+2

Perfekt! Du hast meine Frage nicht nur beantwortet, sondern Active Patterns hat gerade für mich geklickt. Vielen Dank! – lambdakris

+3

kleine Nitpicking, um den ursprünglichen Code näher an die ** Partial ** Active Patterns Return sollte "Some()" und die Übereinstimmung sollte nur 'MatchXtoY -> ...' – Sehnsucht

+2

Auch könnte die Matchers gemacht haben etwas knapper, wenn Sie 'function' anstelle von' match text with' verwenden. –

Verwandte Themen