Проксирование рекурсивной функции

Представьте себе простую рекурсивную функцию, которую мы пытаемся обернуть для ввода и вывода инструментов.

// 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 вызывать инструментальную версию, когда она повторяется.

1 ответ

Функция вызывает countТак что это то, что вам нужно завернуть. Вы можете сделать либо

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

или же

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

Во всем остальном вам нужно будет динамически внедрить функцию для рекурсивного вызова в инструментированную функцию, подобно тому, как это делает Y-комбинатор.

Другие вопросы по тегам