memo2<A, B, R> function

Func2<A, B, R> memo2<A, B, R>(
  1. Func2<A, B, R> func
)

Checks 2 arguments for equality with == operator and returns the cached result if they were not changed.

Implementation

Func2<A, B, R> memo2<A, B, R>(Func2<A, B, R> func) {
  late A prevArgA;
  late B prevArgB;
  late R prevResult;
  bool isInitial = true;

  return ((A argA, B argB) {
    if (!isInitial && argA == prevArgA && argB == prevArgB) {
      return prevResult;
    } else {
      prevArgA = argA;
      prevArgB = argB;
      prevResult = func(argA, argB);
      isInitial = false;

      return prevResult;
    }
  });
}