Programowanie kolejowe F #
Sep 17 2020
Próbuję używać programowania kolejowego w języku F #, używając wyniku, jak opisano w książce Scotta Wlaschina „Modelowanie domen wykonane w sposób funkcjonalny”. Zwykle funkcja ma strukturę
let functionName parameter : Result<ResultType, ErrorType> =
result {
let! resultValue = someValidationAndTransformation parameter
return resultValue
}
Ale chcę zwrócić również niektóre pola obliczeniowe, zarówno w przypadku Ok, jak i przypadku błędu. Najlepsze, co mogłem wymyślić, to
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
To zmienne pole nie wygląda ładnie. Czy istnieje lepszy sposób uzyskania pól obliczeniowych zarówno w przypadku OK, jak i błędu?
Odpowiedzi
2 sdgfsdh Sep 17 2020 at 17:07
Chciałbym użyć matchw tej sytuacji:
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