gpt4 book ai didi

f# - 如何从多步管道功能的每一步获得中间结果?

转载 作者:行者123 更新时间:2023-12-04 22:43:59 27 4
gpt4 key购买 nike

我有一个看起来像这样的代码:

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 "|"

您可以插入 tee为了达到副作用:
[1..10]
|> List.map string
|> tee (printfn "%A")
|> String.concat "|"

那是 无法正常工作 ,但如果您只需要查看一些中间值,可以在紧要关头使用;例如用于故障排除。

否则,对于“适当的”功能解决方案,也许应用 State monad可能是合适的。这将使您能够在执行计算时携带状态。例如,状态可以包含沿途收集的自定义消息......

如果您只想在发现有问题时立即“退出”,那么 Either monad是合适的方式。

关于f# - 如何从多步管道功能的每一步获得中间结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36136163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com