Ich bin vertraut mit der Tatsache, dass in F # gibt es keine gleichwertige "Return" -Schlüsselwort.Wie implementiert man die "frühe Rückkehr" -Logik in F #
Wir sind jedoch kürzlich auf ein Problem gestoßen, bei dem wir einen Workflow benötigt haben, der aus vielen Schritten besteht, wobei jeder Schritt ein gutes oder ein schlechtes Ergebnis liefern kann. Wenn in einem der Schritte ein schlechtes Ergebnis gefunden wird, wollten wir den Workflow beenden und vorzeitig beenden!
Wir haben es geschafft, indem wir effektiv nach einem Fehler in jedem Schritt (d. H. Funktion) gesucht haben, aber ich glaube nicht, dass dies der richtige Weg ist - es ist ineffizient und wir verlassen nicht früh.
Eine Beispielfunktion im Workflow ist wie folgt:
let StepB stepAResult someParameters =
match stepAResult with
| Good(validResourceData) ->
// Do current step processing
// Return current step result
| Error(error) -> error |> Result.Error
Der Workflow selbst wie folgt lautet:
let Workflow someParameters =
let stepAResult = StepA someParameters
let stepBResult = StepB stepAResult someParameters
let stepCResult = StepC stepBResult someParameters
let stepDResult = StepD stepCResult someParameters
stepDResult
So jede Beispielfunktion in dem Ergebnis der vorherigen Funktion übernehmen würde und Führen Sie den aktuellen Schritt nur aus, wenn kein Fehler aufgetreten ist!
Das Problem dabei ist, dass, wenn StepA mit einem Fehler fehlschlägt, jeder zweite Schritt noch aufgerufen wird.
Gibt es eine "funktionale" Möglichkeit, "früh" zurückzukommen, anstatt jede Funktion im Workflow aufzurufen, wo wir jedes Mal nach einem Fehler suchen müssen?
Bitte lesen Sie diese: http://fsharpforfunandprofit.com/posts/recipe-part2/ –