f# – 如何从多步骤管道功能的每个步骤中获得中间结果?
发布时间:2020-12-14 04:59:35 所属栏目:百科 来源:网络整理
导读:我有一个代码如下: this.GetItemTypeIdsAsListForOneItemTypeIdTreeUpIncludeItemType itemType.AutoincrementedId| Array.map (fun i - i.AutoincrementedId)| Array.map (BusinessLogic.EntityTypes.getFullSetOfEntityTypeFieldValuesForItemTypeAid ite
我有一个代码如下:
this.GetItemTypeIdsAsListForOneItemTypeIdTreeUpIncludeItemType itemType.AutoincrementedId |> Array.map (fun i -> i.AutoincrementedId) |> Array.map (BusinessLogic.EntityTypes.getFullSetOfEntityTypeFieldValuesForItemTypeAid item.Autoincrementedid) |> Array.fold Array.append [||] |> Array.map (fun fv -> { fv with ReferenceAutoId = aid } ) |> Array.toSeq |> Seq.distinctBy (fun fv -> fv.Fieldname) |> Seq.toArray 有时这样的代码得到了我需要解释的不寻常的结果.通常代码中没有错误.数据中存在错误.我需要解释为什么这个数据支持不正确.最好的方法是什么? 我只想看一下这个表达式每一步的列表. 就像是: func data |> func2 && Console.WriteLine |> func3 && Console.WriteLine .... 获取输入,将其拆分为两个.将其中一个输出传递给下一个函数,然后将第二个输出传递给控制台. 解决方法
对于快速而肮脏的解决方案,您始终可以添加如下函数:
// ('a -> unit) -> 'a -> 'a let tee f x = f x; x 例如,如果您有这样的组合: [1..10] |> List.map string |> String.concat "|" 你可以插入三通以达到副作用: [1..10] |> List.map string |> tee (printfn "%A") |> String.concat "|" 这不是功能性的,但如果您只需要查看一些中间值,则可以在紧要关头使用;例如用于故障排除 否则,对于“适当的”功能解决方案,也许应用State monad可能是合适的.这将使您能够在执行计算时携带状态.例如,州可以包含沿途收集的自定义消息…… 如果您只是想在发现问题时立即“退出”,那么Either monad就是合适的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |