2017-01-05 1 views
4

단순한 재귀 함수를 상상해보십시오.이 함수는, 입출력을 계측하기 위해서 랩하고 있습니다. 그러나 재귀 함수의 프록 싱

// A simple recursive function. 
 
const count = n => n && 1 + count(n-1); 
 

 
// Wrap a function in a proxy to instrument input and output. 
 
function instrument(fn) { 
 
    return new Proxy(fn, { 
 
    apply(target, thisArg, argumentsList) { 
 
     console.log("inputs", ...argumentsList); 
 
     const result = target(...argumentsList); 
 
     console.log("output", result); 
 
     return result; 
 
    } 
 
    }); 
 
} 
 

 
// Call the instrumented function. 
 
instrument(count)(2);

, 이것은 단지 최상위 레벨의 입력 및 출력을 기록. 재 시행 될 때 count이 계측 된 버전을 호출하게하는 방법을 찾고 싶습니다.

+2

나는'count'를 오버라이드해야한다고 생각합니다. 자바 스크립트는 어휘 범위를 가지고 있기 때문에 함수 내에서'count'를 만들기 위해 할 수있는 일이 전혀 없습니다 ('count'를 오버라이드하는 것을 제외하고). 그러나 나는 틀린 증명하게 행복 할 것이다 :) –

답변

-1

이 함수는 count을 호출하므로 랩핑해야합니다. 당신은 할 수 있습니다

const count = instrument(n => n && 1 + count(n-1)); 

또는

let count = n => n && 1 + count(n-1); 
count = instrument(count); 

다른 모든를 들어, 동적 Y 연결자 그것을 수행하는 방법과 유사 계측 기능에 재귀 호출 기능을 삽입 할 필요가

.