在此示例中,正在热切地评估get_final_answer,并始终返回0.0.我认为包含refs的表达式由于其固有的可变特性而被区别对待(并且在这种情况下并未急切评估).我预计它会返回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
Run Code Online (Sandbox Code Playgroud)
如何在我更新它的块之外取消引用FinalAnswer?
get_final_answerin let get_final_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
Run Code Online (Sandbox Code Playgroud)