【发布时间】:2015-04-24 14:43:09
【问题描述】:
我知道在 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 因错误而失败,则仍会调用所有其他步骤。
是否有一种“功能性”的方式“提前返回”,而不是调用工作流中的每个函数,我们必须每次都检查错误?
【问题讨论】:
标签: f# functional-programming purely-functional