F#中的空聚合运算符?
发布时间:2020-12-14 00:50:10 所属栏目:百科 来源:网络整理
导读:当与C#库进行交互时,我发现自己想要使用C#的空合并运算符,这两个运算符都是Nullable结构和引用类型. 有可能在F#中使用单个重载操作符来近似,这样可以在适当的情况下嵌套? 是的,使用这个SO答案“ Overload operator in F#”中发现的一些小黑客. 在编译时,对
当与C#库进行交互时,我发现自己想要使用C#的空合并运算符,这两个运算符都是Nullable结构和引用类型.
有可能在F#中使用单个重载操作符来近似,这样可以在适当的情况下嵌套?
是的,使用这个SO答案“
Overload operator in F#”中发现的一些小黑客.
在编译时,对于使用(‘a Nullable,a) – > a或(‘a when’a:null,’a) – >的正确的重载’一个单一的运算符可以内联.甚至(‘a选项’a) – > ‘可以投入更多的灵活性. 为了提供更接近c#操作符的行为,我使默认参数’一个懒惰,所以它的源不被调用,除非原始值为空. 例: let value = Something.PossiblyNullReturned() |?? lazy new SameType() 执行: NullCoalesce.fs [Gist]: //https://gist.github.com/jbtule/8477768#file-nullcoalesce-fs type NullCoalesce = static member Coalesce(a: 'a option,b: 'a Lazy) = match a with Some a -> a | _ -> b.Value static member Coalesce(a: 'a Nullable,b: 'a Lazy) = if a.HasValue then a.Value else b.Value static member Coalesce(a: 'a when 'a:null,b: 'a Lazy) = match a with null -> b.Value | _ -> a let inline nullCoalesceHelper< ^t,^a,^b,^c when (^t or ^a) : (static member Coalesce : ^a * ^b -> ^c)> a b = ((^t or ^a) : (static member Coalesce : ^a * ^b -> ^c) (a,b)) let inline (|??) a b = nullCoalesceHelper<NullCoalesce,_,_> a b (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |