Demiryolu programlama F #

Sep 17 2020

Scott Wlaschin'in 'Etki alanı modellemesi işlevsel hale getirildi' kitabında anlatıldığı gibi sonucu kullanarak F #'daki demiryolu programlamasını kullanmaya çalışıyorum. Normalde bir işlevin yapısı vardır

let functionName parameter : Result<ResultType, ErrorType> =
    result {
        let! resultValue = someValidationAndTransformation parameter
        return resultValue
    }

Ancak hem Tamam hem de Hata durumunda bazı hesaplanan alanları da döndürmek istiyorum. Bulabildiğim en iyi şey

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

Bu değişebilir alan hoş görünmüyor. Hem Tamam hem de Hata durumunda hesaplanan alanları almanın daha iyi bir yolu var mı?

Yanıtlar

2 sdgfsdh Sep 17 2020 at 17:07

Bir kullanmak matchbu durumda:

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