Я знаком с тем фактом, что в 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 завершается с ошибкой, все остальные шаги все еще вызываются.
Есть ли «функциональный» способ «досрочного возврата» вместо вызова каждой функции в рабочем процессе, где мы должны каждый раз проверять наличие ошибки?