FSharp Active Pattern

Active pattern 是什麼
簡單的來說是一種數據類型的轉換方式。同一般的類型轉換相比,實質相同,形式卻異常豐富。要知道有時候,並且大多數時候形式是大於實質的。Active pattern常被用來將輸入數據進行分類,也就是說輸入一種類型,輸出的可能是若干種不同的結果。在部分匹配的情況下,也可以返回Option類型,讓調用者決定如何處理進一步的匹配過程。
傳統的類型轉換是一種轉與不轉的過程(當轉換失敗,則不轉),可以說是對原始數據全集的變換。Active pattern進一步也可以對輸入數據的子集進行轉換,之前提到它可以將部分的控制權轉讓,所以可以有很靈活的表達形式。
初學Active pattern的時候,似乎其所有的使用形式都是和match語句綁定,其實並不是全部,只是最長用的partial pattern與match語句有天然的契合作用所以出現的次數比較多

let parseNumeric str =
   match str with
     | Integer i -> printfn "%d : Integer" i
     | Float f -> printfn "%f : Floating point" f
     | _ -> printfn "%s : Not matched." str

msdn上有這樣一個例子 裏面值得注意的是 str是參數 i,f 是結果
其實我們也可以這麼寫
let (Integer i) = "3"
雖然會報一個warning(未全覆蓋),但是也能通過編譯。在一些需要字符串模式匹配的場景中如此形式再簡潔不過了,甚至還能返回後續未處理的數據。讓過程繼續。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章