gpt4 book ai didi

map - F# 在谓词评估为真时停止 Seq.map

转载 作者:行者123 更新时间:2023-12-04 10:50:18 26 4
gpt4 key购买 nike

我目前正在以类似的方式生成一个序列:

migrators
|> Seq.map (fun m -> m())
migrator函数最终返回一个有区别的联合,如:
type MigratorResult =
| Success of string * TimeSpan
| Error of string * Exception

我要停止 map一旦我遇到我的第一个 Error但我需要包括 Error在最后的序列中。

我有类似以下内容向用户显示最终消息
match results |> List.rev with
| [] -> "No results equals no migrators"
| head :: _ ->
match head with
| Success (dt, t) -> "All migrators succeeded"
| Error (dt, ex) -> "Migration halted owing to error"

所以我需要:
  • 当其中一个映射步骤产生 Error 时停止映射的方法
  • 一种使该错误成为添加到序列
  • 中的最后一个元素的方法

    我很欣赏除了 map 之外可能有不同的序列方法这将做到这一点,我是 F# 的新手,在线搜索还没有产生任何结果!

    最佳答案

    我想这里有多种方法,但一种方法是使用展开:

    migrators 
    |> Seq.unfold (fun ms ->
    match ms with
    | m :: tl ->
    match m () with
    | Success res -> Some (Success res, tl)
    | Error res -> Some (Error res, [])
    | [] -> None)
    |> List.ofSeq

    请注意 List.ofSeq最后,这只是为了实现序列。另一种方法是使用序列推导式,有人可能会说它会产生更清晰的代码。

    关于map - F# 在谓词评估为真时停止 Seq.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890404/

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