完整和部分活动模式
有两种类型的活动模式在使用上有所不同 - 完全模式和部分模式。
当你能够枚举所有结果时,可以使用完整的活动模式,例如“数字是奇数还是偶数?”
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
部分活动模式可用作测试形式,无论输入是否属于输入空间中的特定类别,而忽略其他选项。