sdg*_*sdh 1 f# pattern-matching
假设我有这样的类型:
type C =
| W of int
| Z of int
type B =
{
C : C
D : int
}
type A =
| X of int
| Y of B
Run Code Online (Sandbox Code Playgroud)
我想为世博会做些事Z的情况下只:
let a =
Y
{
C = Z 123
D = 456
}
match a with
| X _ -> ()
| Y b ->
match b.C with
| W _ -> ()
| Z z -> printfn "%i" z
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以做到这一点match?
可以使它更简洁吗?
是的,确实有!模式可以嵌套,这是它们的主要要点。您可以Y在的字段上进行B匹配,并在内进行匹配,在上进行匹配C。
像这样:
match a with
| X _ -> ()
| Y { C = Z z } -> printfn "%i" z
| Y { C = W _ } -> ()
Run Code Online (Sandbox Code Playgroud)
而且由于您在两种Y.C.Z情况下都返回单位,因此可以将它们组合成一种通用模式:
match a with
| Y { C = Z z } -> printfn "%i" z
| _ -> ()
Run Code Online (Sandbox Code Playgroud)