gpt4 book ai didi

f# - F#异步中的结果与提高?

转载 作者:行者123 更新时间:2023-12-04 01:50:41 25 4
gpt4 key购买 nike

似乎有两种方法可以在 async 中返回错误工作流程:raiseResult .

let willFailRaise = async {
return raise <| new Exception("oh no!")
}

let willFailResult = async {
return Result.Error "oh no!"
}

对于调用者,处理有点不同:
async {
try
let! x = willFailRaise
// ...
with error ->
System.Console.WriteLine(error)
}

async {
let! maybeX = willFailResult
match maybeX with
| Result.Ok x ->
// ...
| Result.Error error ->
System.Console.WriteLine(error)
}

我的问题是:
  • 每种方法的优点/缺点是什么?
  • 哪种方法更惯用 F#?
  • 最佳答案

    这是 F# 编程的众多方面之一,该方面受到语言及其社区核心思想 split 的影响。

    一方面,您有“F# .NET Framework 语言”,其中异常是处理错误的机制,另一方面 - “F# 函数式编程语言”从世界的 Haskell 一侧借用了其习语。这是哪里Result (也称为 Either )来自。

    “哪个是惯用语”这个问题的答案会根据你问的人和他们看到的内容而改变,但我的经验告诉我,当有疑问时,you're better off using exceptions . Result类型有其适度的用途,但结果密集型编程风格很容易失控,一旦发生这种情况,它就不是一个好景象。

    关于f# - F#异步中的结果与提高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53506325/

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