培根的评价模型是什么.js
What is the Evaluation Model of Bacon.js?
大多数关于响应式编程的资源,例如"响应式编程调查"(Bainomugisha等人,2012),引入了几个特征,通过这些特征可以对不同的响应式解决方案进行分类。其中之一是采用哪种评估模型,即响应式语言(或库)是基于推送的还是基于拉的(或两者兼而有之)。
示例:让我们看一下这段伪代码: var c = a + b;
在响应式环境中,c
应始终包含 a
和 b
的总和。因此,如果a
或b
发生变化,则必须重新计算c
的值。在基于推送的解决方案中,a
和 b
在其值更改时通知c
,以便可以立即重新计算c
的值。在基于拉取的解决方案中,c
查找a
的当前值,并在需要值c
本身时立即查找b
。因此,所有的重新计算都被延迟到请求c
的值。
很长一段时间以来,我一直试图弄清楚 JavaScript 库 Bacon.js 正在使用什么评估模型。让我们假设以下内容:
var a = Bacon.constant(21); // Creates a Property
var b = Bacon.constant(21);
var c = a.combine(b, function (x, y) {
return x + y;
});
根据培根.js文档的这一部分,诸如combine
之类的组合器使用惰性求值,也就是说,它们"避免求值实际上不需要的值"。
- 问题1:什么时候"实际"需要价值观?
- 问题2:至少在上面的例子中,培根采用基于拉动的方法.js是否可以安全?还是我在这里混淆了东西?
然而,在本节的末尾,培根.js文档提到,如果一个人想要"在原始事件发生时进行力评估,[一个人]可以使用flatMap
"。真的,现在我很困惑:
- 问题3:分别,假设培根.js每当我使用
flatMap
时都采用基于推送的评估模型,是否可以安全?还是我在这里把事情搞混了——又一次? - 问题4:我无法使用
flatMap
而不是combine
从上面重现示例。这是否意味着,根据我想要做的事情,培根有时会采用基于拉动的变革传播.js有时它会提出基于推送的传播?
对于能够提供澄清的人,我将非常高兴。 :P
-
当订阅服务器调用事件的
value()
方法时,值是"必需的"。例如,这发生在所有.on Value
订阅者中。像map
和combine
这样的组合器在需要它们各自的值之前不会评估输入值。另一方面,flatMap(f)
需要评估,因为它使用该值通过提供的函数f
生成新流。scan
目前也很热切。 -
如上所述,它是推拉的混合体,因为在必要时进行评估。事实上,培根.js不是基于任何研究论文,也不符合任何理论模型。
-
不,不要假设任何模型。相反,使用引用透明函数,并让系统决定何时需要评估它们。
-
当然,您无法使用
flatMap
重现与combine
相同的功能。
- minimy javascript是什么意思?Backbone.js
- 在node.js中编写单元测试的最佳方式是什么
- node.js是否具有'match()'方法如果是,语法是什么
- googlemarkercluster.js库的备用源路径是什么
- 什么'获取数组的已定义部分的最快方法是什么?JS
- 正确的使用方式是什么.js与网络工作者
- 在 Backbone 中侦听和修改模型属性的正确方法是什么.js
- 骨干网的基本目的和好处是什么.js
- 制造灰尘的侵入性最小的方法是什么.js能够提前渲染打字.js模板
- 黄瓜的建议 ide 或插件是什么.js
- 读取视频中的视频元素/属性的正确方法是什么.js
- 实现 Porthole 的正确方法是什么.js根据内容高度调整 iframe 的大小
- 培根中的惰性评估是什么.js
- 使用下划线对数组进行分类的最快方法是什么.js.
- 培根的评价模型是什么.js
- d3背后的逻辑是什么.js nice()刻度
- Facebook的调度程序中使用的语法是什么.js
- 这是什么:js
- “未捕获的TypeError: Cannot read”属性是什么?JS误差均值
- 这是什么JS设计模式