В Javascript есть шаблон, называемый шаблоном «Русская кукла» (его также можно назвать «одноразовым»). По сути, это функция, которая в какой-то момент заменяет себя другой.
Простой пример:
var func = function(){
func = function(){ console.log("subsequent calls call this...");};
console.log("first call");
}
Итак, когда вы в первый раз вызываете func, она выводит «первый вызов», а в следующий (и последующие разы) выводит «последующие вызовы вызывают это ...». (это было бы легко сделать и в Scheme, например)
Я ломал голову над тем, как это сделать в Ocaml?
Изменить: одно решение, которое я придумал:
let rec func = ref( fun () -> func := ( fun () -> Printf.printf("subsequent..\n"));Printf.printf("First..\n"));;
Называется как : ! func () ;;
Интересно, что если я не включу "rec" в определение, он никогда не вызовет последующую функцию ... Он всегда печатает "Сначала ...".