根据我对 FRP 的理解,我们应该使用纯函数,这意味着输入不会发生变异。如何创建依赖于先前值的纯函数?例如,我有一个每次按空格键都会水平移动的对象。这意味着需要根据之前的 x 值更新 x 值。最初,对象从 x -> 0 开始。按空格键,x -> 1。再次按空格键,x -> 2。如果我们不允许像这样(javascript代码)改变 x 的值,let x = 0;function set_x() { x += 1; }我的程序如何记住 x 的先前值是多少?
1 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
通常 FRP 通过使用高阶函数从另一个流创建一个流来工作。当您需要流的先前值时,您想要的函数将被调用fold
,reduce
或scan
。它接受一个事件流、一个起始值和函数,并产生另一个以起始值开始的流,然后每次有一个结果f(p, x)
(其中p
是新流的前一个值和x
原始流的当前值)原始流上的事件。
例如,在 Bacon.JS 中,你想要的方法被调用scan
(fold
也存在,但只发出最终值,所以这里没有做我们想要的),你的代码可能如下所示:
const numberOfSpacePresses = spacePressEvents.scan(0, (count, _) => count + 1);
某些库也可能已经有一个函数或方法count
可以满足您的需求,因此您只需编写spacePressEvents.count()
.
添加回答
举报
0/150
提交
取消