为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2021-09-30 17:35:32
根据我对 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,reducescan。它接受一个事件流、一个起始值和函数,并产生另一个以起始值开始的流,然后每次有一个结果f(p, x)(其中p是新流的前一个值和x原始流的当前值)原始流上的事件。

例如,在 Bacon.JS 中,你想要的方法被调用scanfold也存在,但只发出最终值,所以这里没有做我们想要的),你的代码可能如下所示:

const numberOfSpacePresses = spacePressEvents.scan(0, (count, _) => count + 1);

某些库也可能已经有一个函数或方法count可以满足您的需求,因此您只需编写spacePressEvents.count().


查看完整回答
反对 回复 2021-09-30
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信