Pemrograman kereta api F #

Sep 17 2020

Saya mencoba menggunakan pemrograman kereta api di F # menggunakan hasil seperti yang dijelaskan dalam buku Scott Wlaschin 'Pemodelan domain dibuat berfungsi'. Biasanya suatu fungsi memiliki struktur

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

Tapi saya ingin mengembalikan juga beberapa kolom kalkulasi, baik dalam kasus Ok dan Error. Yang terbaik yang bisa saya dapatkan adalah

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

Bidang yang bisa berubah ini tidak terlihat bagus. Apakah ada cara yang lebih baik untuk mendapatkan kolom kalkulasi dalam kasus Ok dan Error?

Jawaban

2 sdgfsdh Sep 17 2020 at 17:07

Saya akan menggunakan a matchdalam situasi ini:

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