我有返回a' option类型的函数.我的功能看起来像:
let foo(a) =
match fooB a.F1 with
| Some(b) -> match fooC b.F2 with
| Some(c) -> match fooD c.F3 with
| Some(d) -> match fooE d.F4 with
// ......
| None -> ()
| None -> ()
| None -> ()
Run Code Online (Sandbox Code Playgroud)
是否有任何功能模式可以避免这种多层次match expressions?
JLR*_*she 11
看起来像你正在寻找的是Option.bind:
let foo(a) =
fooB a.F1
|> Option.bind(fun b -> fooC b.F2)
|> Option.bind(fun c -> fooD c.F3)
|> Option.bind(fun d -> fooE d.F4)
Run Code Online (Sandbox Code Playgroud)
Option.bind 基本上相当于
// ('a -> 'b option) -> 'a option -> 'b option
let bind f m =
match m with
| Some x -> f x
| _ -> None
Run Code Online (Sandbox Code Playgroud)