Eisenbahnprogramm F #
Sep 17 2020
Ich versuche, die Eisenbahnprogrammierung in F # unter Verwendung des Ergebnisses zu verwenden, wie in Scott Wlaschins Buch 'Domain Modeling made Functional' beschrieben. Normalerweise hat eine Funktion die Struktur
let functionName parameter : Result<ResultType, ErrorType> =
result {
let! resultValue = someValidationAndTransformation parameter
return resultValue
}
Ich möchte aber auch einige berechnete Felder zurückgeben, sowohl in Ok als auch im Fall Error. Das Beste, was ich mir einfallen lassen konnte, war
let functionName parameter : Result<ResultType, ErrorType> * CalculatedFields =
let mutable calculatedFields = {some defaultvalue}
let result =
result {
let! resultValue = someValidationAndTransformation parameter
let calculatedField = someCalculation resultValue
calculatedFields <- {calculatedFields with calculatedField}
return resultValue
}
result, calculatedFields
Dieses veränderliche Feld sieht nicht gut aus. Gibt es eine bessere Möglichkeit, die berechneten Felder sowohl im OK- als auch im Fehlerfall abzurufen?
Antworten
2 sdgfsdh Sep 17 2020 at 17:07
Ich würde matchin dieser Situation ein verwenden:
let functionName parameter : Result<ResultType, ErrorType> * CalculatedFields =
let result = someValidationAndTransformation parameter
let calculatedFields =
match result with
| Ok x -> someCalculation x
| Error e -> { some defaultvalue }
result, calculatedFields