一般的な「memoize」関数(入力として関数を関数として、出力として関数として、pythonのデコレータとして)を実装する方法があるのだろうかと思いますが、cpsも扱うことができますスタイル関数。正常な機能(のような「結果の値リターンで戻ってくる、パラメータは入力のみのためのものです!」)memoize機能についてmemoize継続継承スタイル関数
は
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スタイルの関数をメモできるようにしたいと思っていますし、論理のすべてを "キャッシュ"を挿入することで混乱させたくありません。
関数の引数としてハッシュテーブルを渡すと(キー:値のn個の組を定義する)、それは目的のロジックを簡潔にしますか? – fcalderan
それは単純ではありません:私はajax呼び出しを扱っているので、私はcps形式の関数を使用しています:continueIfTrue/continueIfFalseは関数で直接呼び出されず、コールバックとして登録され、応答が戻ったときにブラウザから呼び出されます。 ..私はハッシュテーブルを使って私を助けることができないのか分かりません(多分私は盲目です:私を啓蒙する!)。 –