web-dev-qa-db-fra.com

Mémoriser une fonction curieuse

const f = (arg1) => (arg2) => { /* returns something */ }

Est-il possible de mémoriser f au regard des 2 arguments, à savoir:

f(1)(2);
f(1)(3); // Cache not hit
f(4)(2); // Cache not hit
f(1)(2); // Cache hit
31
amaurymartiny

Vous ne pouvez pas passer la carte à chaque fonction. Vous pouvez faire comme le suivant:

const memoize = fn => {
  const cache = {};
  return (...args) => {
    const curriedFn = fn(...args);
    return (...next) => {
      const key = // generate your key
      if (key in cache) return cache[key];
      return (cache[key] = curriedFn(...next));
    }
  }
}
0
SashaSemanyuk