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# 在函数中取消引用ref会产生不同的结果。为什么?_F# - Fatal编程技术网

F# 在函数中取消引用ref会产生不同的结果。为什么?

F# 在函数中取消引用ref会产生不同的结果。为什么?,f#,F#,在这个示例中,get_final_答案被急切地评估,并且总是返回0.0。我认为包含ref的表达式因其固有的易变特性而受到不同的对待(在本例中并不急于进行评估)。我期望它返回7.0 let FinalAnswer = ref 0.0 let get_final_answer = !FinalAnswer let rec eval_expr_fail = FinalAnswer := 7.0 get_final_answer // fails, ret

在这个示例中,get_final_答案被急切地评估,并且总是返回0.0。我认为包含ref的表达式因其固有的易变特性而受到不同的对待(在本例中并不急于进行评估)。我期望它返回7.0

let FinalAnswer = ref 0.0
let get_final_answer = !FinalAnswer

let rec eval_expr_fail =
        FinalAnswer := 7.0
        get_final_answer        // fails, returns 0.0

let rec eval_expr_works =
        FinalAnswer := 7.0
        !FinalAnswer           // works, return 7.0

如何在我更新的块之外取消FinalAnswer的引用?

get\u final\u answer
in
let get\u final\u answer=!FinalAnswer
是一个浮点值,不是函数。它的值为0.0,赋值后与
FinalAnswer
无关

将其作为一个函数可以得到您想要的:

let FinalAnswer = ref 0.0
let get_final_answer() = !FinalAnswer

let rec eval_expr_fail =
        FinalAnswer := 7.0
        get_final_answer ()       //  returns 7.0

获取最终答案
让我们获取最终答案=!FinalAnswer
是一个浮点值,不是函数。它的值为0.0,赋值后与
FinalAnswer
无关

将其作为一个函数可以得到您想要的:

let FinalAnswer = ref 0.0
let get_final_answer() = !FinalAnswer

let rec eval_expr_fail =
        FinalAnswer := 7.0
        get_final_answer ()       //  returns 7.0

函数也是值!你的意思是“是一个浮点数,不是一个函数”。函数也是值!你的意思是“是一个浮点数,不是一个函数”。