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