Lay*_*lez 6 f# pattern-matching system.reactive
假设我有这种类型:
type T = int option
Run Code Online (Sandbox Code Playgroud)
以及该类型的可观察量:
let o : IObservable<T> = // create the observable
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种更好的表达方式:
o.Where(function | None -> false | Some t -> true)
.Select(function | Some t -> t)
Run Code Online (Sandbox Code Playgroud)
一个只能传播
Some案例的可观察者.
有几件事我不喜欢.
你不能使用Observable.choose吗?像这样的东西:
let o1 : IObservable<int option> = // ...
let o2 = Observable.choose id o1
Run Code Online (Sandbox Code Playgroud)
如果您无法选择某个类型,请说:
type TwoSubcases<'a,'b> = | Case1 of 'a | Case2 of 'b
Run Code Online (Sandbox Code Playgroud)
和部分活动模式:
let (|SecondCase|_|) = function
| Case1 _ -> None
| Case2 b -> Some b
Run Code Online (Sandbox Code Playgroud)
那么你可以这样做:
let o1 : IObservable<TwoSubcases<int, float>> = // ...
let o2 : IObservable<float> = Observable.choose (|SecondCase|_|) o1
Run Code Online (Sandbox Code Playgroud)