web-dev-qa-db-ja.com

認定された機能をメモする

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

つまり、2つの引数に関してfをメモすることは可能ですか?

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

すべての関数にマップを渡すことはできません。あなたは次のようにすることができます:

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