我想知道是否有一种实现通用“记忆化”函数的方法(就像Python装饰器中输入为函数,输出为函数),能够处理cps-style函数。
对于普通函数(即“结果值通过返回值返回,参数仅用于输入!”),一个memoize函数可以非常简单(在JavaScript中)。
但是我的简单
也许我可以找到
有人能告诉我我错了吗? :D
我希望能够记忆半打cps风格的函数,而不必在每个函数中插入“缓存”来搞乱逻辑。
对于普通函数(即“结果值通过返回值返回,参数仅用于输入!”),一个memoize函数可以非常简单(在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;
};
}
但是我的简单
memoize
函数不能记忆cps风格的函数,因为我需要再次计算类型为函数的参数,并知道要传递给它们的参数。例如,给定以下函数:function cps(param, next) {
var ret = param + 1;
// setTimeout for simulate async behaviour
setTimeout(function () {
next(ret);
}, 0);
}
也许我可以找到
next
是函数,但它的签名很棘手,而且绝对不是函数中使用的参数!有人能告诉我我错了吗? :D
我希望能够记忆半打cps风格的函数,而不必在每个函数中插入“缓存”来搞乱逻辑。