如何从多步管道函数的每个步骤中获取中间结果?
How can I get the intermediate results from each step of a multi-step pipeline function?
我的代码如下所示:
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 "|"
那没有功能,但如果您只需要查看一些中间值,可以在紧要关头使用;例如用于故障排除。
否则,对于 'proper' 功能解决方案,也许应用 State monad 可能是合适的。这将使您能够在执行计算时随身携带状态。例如,状态可以包含沿途收集的自定义消息...
如果您只是想在发现有问题时立即 'exit',那么 Either monad 是合适的方法。
我的代码如下所示:
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 "|"
那没有功能,但如果您只需要查看一些中间值,可以在紧要关头使用;例如用于故障排除。
否则,对于 'proper' 功能解决方案,也许应用 State monad 可能是合适的。这将使您能够在执行计算时随身携带状态。例如,状态可以包含沿途收集的自定义消息...
如果您只是想在发现有问题时立即 'exit',那么 Either monad 是合适的方法。