Me pregunto si hay una manera de implementar una funcionalidad genérica de "memoize" (como en una función con una función como entrada y una función como salida, como decoradores de python) capaz de manejar también cps funciones de estilomemoise continuation passing style function
para una función normal (como en "el valor del resultado regresa por el retorno, los parámetros son sólo para la entrada!") Una función memoize puede ser tan simple como (en javascript)
function memoize(fun) {
var cache = {};
return function() {
var args = Array.prototype.slice.call(arguments);
if (args in cache)
return cache[args];
var ret = fun.apply(this, arguments);
cache[args] = ret;
return ret;
};
}
pero una función de estilo cps no puede ser memorizada por mi función simple memoize
, porque necesito evaluar "nuevamente" los argumentos de la función de tipo, conociendo también el parámetro para pasarlos.
Por ejemplo, dada la función
function cps(param, next) {
var ret = param + 1;
// setTimeout for simulate async behaviour
setTimeout(function() {
next(ret);
}, 0);
}
tal vez pueda encontrar que next
es una función, pero su firma (bueno ... tal vez, pero es complicado), y definitivamente no los parámetros utilizados en el ¡función!
¿Alguien me puede decir que estoy equivocado? : D
Me interesa poder memorizar media docena de funciones de estilo cps y no quiero meterme con la lógica insertando un "caché" en cada una de ellas.
si pasa una tabla hash como argumento de su función (definiendo n-pares de clave: valores) simplemente haría la lógica para su propósito? – fcalderan
no es tan simple: estoy usando funciones cps-style porque estoy tratando con una llamada ajax: el continueIfTrue/continueIfFalse no son llamadas directamente por mis funciones, son registradas como devoluciones de llamada y son llamadas por el navegador cuando la respuesta regresa. No puedo ver cómo el uso de una tabla hash puede ayudarme (tal vez estoy solo a ciegas: ¡D ilumínalo!). –