ho appena scritto un little helper per creare API come questo in un modo un po 'coerente, forse ti piace.
// > npm i mu-ffsm # install node dependency
var mkChained = require('mu-ffsm');
L'idea è che si costruisce un costruttore fluente con un certo stato iniziale di tipo S
chiamando una funzione di ingresso. Quindi ogni chiamata concatenata trasferisce lo stato in un nuovo stato. .
Il valore si ottiene da concatenamento un gruppo di chiamate può essere eseguito come una funzione, che chiama l'uscita di costruire un valore da quello stato e le opzioni si passa
- entrata: * ⟶ S
- transizione: (S ⟶ *) ⟶ S
- uscita: S ⟶ (* ⟶ *)
Ad esempio
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 */}
});
Quindi 0
, 1
sono le funzioni di ingresso, uscita. Tutte le altre funzioni eseguono il passaggio da uno stato interno. Tutte le funzioni possono assumere argomenti, ad es.opt
Creiamo un'istanza della nostra API di recente realizzato,
var call = API() // entry
.whut() // transition
.then() // transition
.whut(); // transition
e chiamarlo
var result0 = call() // exit
, result1 = call() // exit
Dai un'occhiata alla la (piccola) source per vedere come questo è implementato.
ps. Ho usato questa risposta per aggiornare i documenti: D
Penso che tu abbia risposto alla tua stessa domanda .... cosa c'è di sbagliato nel secondo blocco di codice? – Zoidberg
@Zoidberg: Il titolo è il metodo di concatenamento, quindi la cosa qui non è proprio quella di farlo funzionare ma di farlo funzionare usando il metodo di concatenamento. – kizzx2