Tôi quen thuộc với thực tế rằng trong F # không có từ khóa "trả lại" tương đương.Cách triển khai logic "trả về sớm" trong F #
Tuy nhiên, chúng tôi đã gặp một vấn đề gần đây, nơi chúng tôi cần một quy trình làm việc bao gồm nhiều bước, trong đó mỗi bước có thể trả lại kết quả tốt hoặc xấu. Nếu có kết quả xấu trong bất kỳ bước nào, chúng tôi muốn thoát khỏi luồng công việc - và thoát sớm!
Chúng tôi đã giải quyết vấn đề này bằng cách kiểm tra có hiệu quả Lỗi trong mỗi bước (tức là chức năng) nhưng tôi không cảm thấy đây là cách chính xác để thực hiện - không hiệu quả và chúng tôi không thoát sớm.
Một chức năng mẫu trong công việc là như sau:
let StepB stepAResult someParameters =
match stepAResult with
| Good(validResourceData) ->
// Do current step processing
// Return current step result
| Error(error) -> error |> Result.Error
Các công việc chính nó là như sau:
let Workflow someParameters =
let stepAResult = StepA someParameters
let stepBResult = StepB stepAResult someParameters
let stepCResult = StepC stepBResult someParameters
let stepDResult = StepD stepCResult someParameters
stepDResult
Vì vậy, mỗi chức năng mẫu sẽ mất trong kết quả của hàm trước và chỉ thực hiện bước hiện tại nếu không có Lỗi!
Vấn đề tôi gặp phải là nếu StepA không thành công với Lỗi, mọi bước khác vẫn được gọi.
Có cách "hoạt động" có chức năng "trả lại sớm" thay vì gọi mọi chức năng trong quy trình làm việc, tại đó chúng tôi phải kiểm tra từng lần cho Lỗi không?
Xin vui lòng đọc này: http://fsharpforfunandprofit.com/posts/recipe-part2/ –