我熟悉在 F# 中没有等效的“return”关键字这一事实。
然而,我们最近遇到了一个问题,我们需要一个包含许多步骤的工作流程,其中每个步骤都可以返回一个好的或坏的结果。如果在任何步骤中发现错误结果,我们希望退出工作流程 - 并提前退出!
我们通过有效地检查每个步骤(即函数)中的错误来解决它,但我认为这不是正确的方法 - 它效率低下,我们不会提前退出。
工作流中的示例函数如下:
let StepB stepAResult someParameters =
match stepAResult with
| Good(validResourceData) ->
// Do current step processing
// Return current step result
| Error(error) -> error |> Result.Error
工作流程本身如下所示:
let Workflow someParameters =
let stepAResult = StepA someParameters
let stepBResult = StepB stepAResult someParameters
let stepCResult = StepC stepBResult someParameters
let stepDResult = StepD stepCResult someParameters
stepDResult
所以每个样本函数都会接受前一个函数的结果,并且只有在没有错误的情况下才执行当前步骤!
我遇到的问题是,如果 StepA 因错误而失败,则仍会调用所有其他步骤。
是否有一种“提前返回”的“功能性”方式,而不是调用工作流中的每个函数,我们必须每次都检查错误?