Javascript'te, Rus bebek modeli adı verilen bir desen vardır (bu ayrıca 'tek çekim' olarak da adlandırılabilir). Temel olarak, bir noktada kendisini başka biriyle değiştiren bir işlevdir.Ocaml'de Rus bebek modeli nasıl uygulanır?
Basit bir örnek:
var func = function(){
func = function(){ console.log("subsequent calls call this...");};
console.log("first call");
}
Yani onu fonk çıktı "ilk çağrı" ve bir sonraki (ve müteakip defa) olacak diyoruz ilk kez baskı var "sonraki aramalarda bu ara ...". (Bu, şemada da yapılması kolay olurdu, örneğin)
Bunu Ocaml'de nasıl yapacağım konusunda çok şaşırdım?
Düzenleme: olarak
let rec func = ref(fun() -> func := (fun() -> Printf.printf("subsequent..\n"));Printf.printf("First..\n"));;
Aranan:! Tek çözüm ben ile geldim fonksiyon() ;;
İlginçtir, eğer tanımda 'rec' içermezsem, hiçbir zaman sonraki işlevi çağırmaz ... Her zaman 'İlk' ... 'i basar.
Bu ... sadece yanlıştır. – phooji
, aşağıda önerilen OCaml çözümlerinin, "func" kelimesinin mutabilitesini kapsülleydiklerinden, JavaScript örneğinizin "daha temiz" olduğunu lütfen unutmayın: ilk aramadan sonra, işlev iyi için değiştirilir ve kimse onu değiştirmek için bir referansa erişemez. geri. Bu, "bebek" çağrısına yerel "f" referansı yapılarak yapılır. Tabi ki, referansın hala mevcut olması için referans olmasını isterseniz, bu mümkün olabilirdi. – gasche