你的名字
主題
| 來自:ywsing0 | 時間:Thu 2018-10-11 15:19:40 | | 弄了一個 fluent 形式的「顯微鏡」組合子來作 immutable updates. | 例如 | | let upd0 = lens().key('t').apply(t => t + 1); | let upd1 = lens().key('vscroll').key('vms').index(3).apply(vm => Math.random().toString()); | | setInterval(() => renderAgain(rd_vm, upd0), 1000); | setInterval(() => renderAgain(rd_vm, upd1), 3000); | | | 這居然花了我大半天! | | 詳情在 fun.js... | | | let lens_ = gp => { | return { | apply: f => object0 => { | let { g: object1, p, } = gp(object0); | return p(f(object1)); | }, | index: index => lens_(object0 => { | let { g: object1, p, } = gp(object0); | return { | g: object1[index], | p: value => p([...object1.slice(0, index), value, ...object1.slice(index + 1, object1.length),]), | }; | }), | key: key => lens_(object0 => { | let { g: object1, p, } = gp(object0); | return { | g: object1[key], | p: value => p({ ...object1, [key]: value, }), | }; | }), | }; | }; | | let lens = () => lens_(object => ({ g: object, p: value => value, }));
發出