完整和部分活動模式
有兩種型別的活動模式在使用上有所不同 - 完全模式和部分模式。
當你能夠列舉所有結果時,可以使用完整的活動模式,例如“數字是奇數還是偶數?”
let (|Odd|Even|) number =
if number % 2 = 0
then Even
else Odd
請注意,活動模式定義列出了兩種可能的情況,而沒有其他情況,並且正文返回列出的一種情況。在匹配表示式中使用它時,這是完全匹配:
let n = 13
match n with
| Odd -> printf "%i is odd" n
| Even -> printf "%i is even" n
當你想要將輸入空間分解為完全覆蓋它的已知類別時,這很方便。
另一方面,部分活動模式允許你通過返回 option
顯式忽略一些可能的結果。他們的定義使用 _
的特殊情況來表示無與倫比的情況。
let (|Integer|_|) str =
match Int32.TryParse(str) with
| (true, i) -> Some i
| _ -> None
這樣我們就可以匹配,即使我們的解析函式無法處理某些情況。
let s = "13"
match s with
| Integer i -> "%i was successfully parsed!" i
| _ -> "%s is not an int" s
部分活動模式可用作測試形式,無論輸入是否屬於輸入空間中的特定類別,而忽略其他選項。