如果我的值需要根据以前的值更新,我该如何编写纯函数式代码?

根据我对 FRP 的理解,我们应该使用纯函数,这意味着输入不会发生变异。如何创建依赖于先前值的纯函数?


例如,我有一个每次按空格键都会水平移动的对象。这意味着需要根据之前的 x 值更新 x 值。


最初,对象从 x -> 0 开始。按空格键,x -> 1。再次按空格键,x -> 2。


如果我们不允许像这样(javascript代码)改变 x 的值,


let x = 0;

function set_x() {

    x += 1;

  }

我的程序如何记住 x 的先前值是多少?


慕斯王
浏览 156回答 1
1回答

蛊毒传说

通常 FRP 通过使用高阶函数从另一个流创建一个流来工作。当您需要流的先前值时,您想要的函数将被调用fold,reduce或scan。它接受一个事件流、一个起始值和函数,并产生另一个以起始值开始的流,然后每次有一个结果f(p, x)(其中p是新流的前一个值和x原始流的当前值)原始流上的事件。例如,在 Bacon.JS 中,你想要的方法被调用scan(fold也存在,但只发出最终值,所以这里没有做我们想要的),你的代码可能如下所示:const numberOfSpacePresses = spacePressEvents.scan(0, (count, _) => count + 1);某些库也可能已经有一个函数或方法count可以满足您的需求,因此您只需编写spacePressEvents.count().
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript