자바 스크립트에는 러시아 인형 패턴이라는 패턴이 있습니다 (이 패턴을 '원샷'이라고도 함). 기본적으로, 그것은 어떤 시점에서 다른 것으로 대체되는 함수입니다.Ocaml에서 러시아어 인형 패턴을 구현하는 방법은 무엇입니까?
간단한 예 :
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'를 정의에 포함시키지 않으면 연속 함수를 호출하지 않습니다. 항상 'First ...'를 인쇄합니다.
그건 ... 그냥 잘못되었습니다. – phooji
아래에 제안 된 OCaml 솔루션은 JavaScript 예제에서 "func"의 변경 가능성을 캡슐화하기 때문에 "깨끗합니다"라는 점에 유의하십시오. 첫 번째 호출 후에 기능이 좋게 변경되고 아무도 변경 사항을 참조로 액세스 할 수 없습니다 뒤로. 이 작업은 "인형"호출에 대해 "f"참조를 사용하여 수행됩니다. 물론 수정을 위해 참조를 사용할 수 있기를 원한다면 가능할 수도 있습니다. – gasche