철도 프로그래밍 F #

Sep 17 2020

Scott Wlaschin의 책 '도메인 모델링이 기능적으로 만들어 짐'에 설명 된대로 결과를 사용하여 F #에서 철도 프로그래밍을 사용하려고합니다. 일반적으로 함수에는 다음과 같은 구조가 있습니다.

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

그러나 Ok 및 Error 사례 모두에서 일부 계산 된 필드도 반환하고 싶습니다. 내가 생각 해낼 수있는 최선은

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

이 가변 필드는보기에 좋지 않습니다. Ok 및 Error 사례에서 계산 된 필드를 얻는 더 좋은 방법이 있습니까?

답변

2 sdgfsdh Sep 17 2020 at 17:07

match이 상황에서 사용합니다 .

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