В этом примере get_final_answer с нетерпением оценивается и всегда возвращает 0.0.Я думал, что выражения, содержащие ссылки, обрабатывались по-разному (и в этом случае не были оценены с нетерпением) из-за их изменчивых характеристик.Я ожидал, что он вернется 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 вне блока, в котором я его обновил?