完整和部分活動模式

有兩種型別的活動模式在使用上有所不同 - 完全模式和部分模式。

當你能夠列舉所有結果時,可以使用完整的活動模式,例如“數字是奇數還是偶數?”

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

部分活動模式可用作測試形式,無論輸入是否屬於輸入空間中的特定類別,而忽略其他選項。