Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 铁路规划#_F# - Fatal编程技术网

F# 铁路规划#

F# 铁路规划#,f#,F#,我试图在F#中使用railway编程,使用Scott Wlaschin的书《域建模功能化》中描述的结果。通常,函数具有以下结构 let functionName parameter : Result<ResultType, ErrorType> = result { let! resultValue = someValidationAndTransformation parameter return resultValue } let

我试图在F#中使用railway编程,使用Scott Wlaschin的书《域建模功能化》中描述的结果。通常,函数具有以下结构

let functionName parameter : Result<ResultType, ErrorType> =
    result {
        let! resultValue = someValidationAndTransformation parameter
        return resultValue
    }
let functionName参数:结果=
结果{
让!resultValue=someValidationAndTransformation参数
返回结果值
}
但我还想返回一些计算字段,包括to 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
let functionName参数:结果*计算字段=
让可变计算字段={some defaultvalue}
让结果=
结果{
让!resultValue=someValidationAndTransformation参数
让calculatedField=someCalculation resultValue

计算字段在这种情况下,我将使用
匹配项

let functionName参数:结果*计算字段=
让结果=someValidationAndTransformation参数
让计算字段=
匹配结果
|确定x->somex
|错误e->{some defaultvalue}
结果,计算字段

My pseudo code sample是真实代码的简化版本,但是真实代码可以重构为您的示例,这比将结果{..}交织起来更容易理解使用计算字段的计算进行表达式。如果您有更复杂的内容,那么您尝试过的嵌套
结果
工作流是完全有效的。如果您需要在
结果
工作流中处理两个方面,您还可以将
let!
切换为
let
。我知道,但当我尝试我最初的在没有在结果{..}表达式之前声明可变变量的情况下,最后一条语句不识别calculatedFields(这将在结果{..}表达式中定义)