このようなAPIをある程度一貫した方法で作成するためのちょっとしたヘルパーを書いたところですが、おそらくあなたはそれが好きでしょう。
// > npm i mu-ffsm # install node dependency
var mkChained = require('mu-ffsm');
アイデアはS
、エントリ関数を呼び出すことによって、タイプの初期状態を持つ流暢なビルダーを構築することです。次に、連鎖呼び出しごとに状態が新しい状態に遷移します。
一連の呼び出しをチェーンすることで得られる値は、関数として実行できます。この関数は、exitを呼び出して、その状態と渡したオプションから値を作成します。
- エントリ:*⟶S
- 遷移:(S⟶*)⟶S
- 終了:S⟶(*⟶*)
例えば
var API = mkChained({
0: function(opt) {return ;/* create initial state */},
then: function(s, opt) {return s; /* new state */},
whut: function(s, opt) {return s; /* new state */},
1: function(s, opt) {return ;/* compute final value */}
});
つまり0
、1
は入口、出口関数です。他のすべての関数は内部状態を遷移します。すべての関数は引数を取ることができます。opt
新しく作成されたAPIのインスタンスを作成します。
var call = API() // entry
.whut() // transition
.then() // transition
.whut(); // transition
そしてそれを呼ぶ
var result0 = call() // exit
, result1 = call() // exit
(小さな)ソースを見て、これがどのように実装されているかを確認してください。
ps。この回答を使用してドキュメントを更新しました:D