我了解如何在 F# 中定义和使用活动模式,包括部分活动模式以及可用的不同类型的模式。例如
let (|Big|Small|) animal = if animal.IsBig then Big(animal) else Small(animal)
let f = function | Big(_) -> "big" |Small(_) -> "small
但是,我对在let
绑定、参数和其他地方使用活动模式和区分联合感到困惑。例如,MSDN 有以下代码:
let GetSubstring1 (Slice(p0, p1, text)) =
printfn "Data begins at %d and ends at %d in string %s" p0 p1 text
text.[p0..p1]
这让我有点困惑。
一个具体的问题。假设我有歧视工会,
type Union = A of int * int | B of int
我可以以某种方式制作一个只接受的函数Union.A
,例如
let f (A(a, b)) = a + b
在这种情况下,它告诉我有不匹配的模式。有办法满足吗?