2016-09-29 68 views
5

有沒有辦法在F#中封裝一個模式?有沒有辦法在F#中封裝一個模式?

例如,而不是寫這個...

let stringToMatch = "example1" 

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

是否有某種方式來完成這些方針的東西...

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

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

回答

6

你可以用活動模式做到這一點:

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

完美!你不僅回答了我的問題,而且還爲我點擊了Active Patterns。謝謝! – lambdakris

+3

有點挑剔,爲了匹配最初的代碼更加接近**部分**活動模式的返回應該是'Some()',匹配應該只是'MatchXtoY - > ...' – Sehnsucht

+2

另外,可以使匹配器通過使用'function'而不是''將文本與''匹配。 –

相關問題