[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Specifically, the second return value from this macro is a procedure that generates URLs given a handler function. This allows one to go both ways in URL-handler mapping (generating URLs from handlers/controllers) instead of just one-way (mapping requests to specific handlers/controllers) as in a conventional router in Rails or Django.
Once you learn about this pattern, you start to see it in more places. A slightly different example, I am working on a mail router (something akin to procmail) in Racket, and have used a similar pattern to map from predicates (procedures taking an email and returning true or false depending on certain conditions) to symbols representing those predicates in a DSL. A hash table with procedures for keys lets me do this mapping in both directions should I need to.
(Note that I am not actually sure whether dispatch-rules itself uses procedure-keyed dictionaries or hash tables under the hood.)
const memoize = func => {
const cache = new Map();
const memoized = arg => {
const cached = cache.get(arg);
if (cached !== undefined) {
return cached;
}
const result = func(arg);
cache.set(arg, result);
return result;
};
memoized.clearCache = cache.clear.bind(cache);
return memoized;
};
(Also, you could use WeakMap instead of Map if you knew the memoized function would only ever receive objects as arguments.)