Javascript Bacon.js:流和属性之间的实际区别

Javascript Bacon.js:流和属性之间的实际区别,javascript,events,bacon.js,Javascript,Events,Bacon.js,作为bacon.js的新手,我似乎无法理解事件流和属性之间的区别 属性是从流生成的(使用.constant?)生成的属性除外) 他们有很多共同的方法 订阅它们的方式也一样 有人能解释一下它们之间的区别以及什么时候使用哪一种吗 在下面的示例中,流和属性具有完全相同的行为。恐怕我看不到这一点 var stream = Bacon.sequentially(250, [1, 2, 3, 4, 5, 6, 7, 8]); var property = stream.toProperty(); st

作为bacon.js的新手,我似乎无法理解事件流和属性之间的区别

  • 属性是从流生成的(使用
    .constant
    ?)生成的属性除外)
  • 他们有很多共同的方法
  • 订阅它们的方式也一样
有人能解释一下它们之间的区别以及什么时候使用哪一种吗

在下面的示例中,
属性
具有完全相同的行为。恐怕我看不到这一点

var stream = Bacon.sequentially(250, [1, 2, 3, 4, 5, 6, 7, 8]);
var property = stream.toProperty();

stream.onValue(function (val) {
    console.log("Stream", val);
});

property.onValue(function (val) {
    console.log("Property", val);
});
Bacon.js属性是FRP文献中的行为,而EventStreams只是事件。它们看起来很相似,但在语义上却大不相同


熟悉FRP概念,例如阅读。

From:“属性用作时变值的抽象。属性类似于EventStreams,但也有当前值的概念。大多数功能与EventStreams共享。“当前值”是什么意思?属性值似乎无法直接读取。您无法读取属性(行为)的当前值,这违反了语义。行为是一个时变值,但不能显式地处理时间。若我们能让你们读取当前值,那个么在你们想读取FRP中以前的值等之后,你们就不需要当前值了;e、 g.如果我们用
currentTime.assign(label,“text”)
显示当前时间-在这里,我们通用地处理所有值,库会注意,当
currentTime
更改时,
label.text
会被更新。这正是我计算的方式,但是为什么不能说eventStream也有当前值呢?或者是一个属性只有一个当前值,这将它与流区分开来?您可以谈论在EventStream中发生的最后一个事件,但没有当前值。离散时间FRP太容易考虑事物的实现(是的,属性和事件流可以使用类似的低级原语实现),而不是它们的语义。阅读continuos time FRP:即使你永远都不需要它,它也会使区别更加清晰。例如动画是连续时间,但是现实世界限制了我们,所以我们每秒采样60次。如果我们考虑采样值,就有先前的值,但是在(连续)系统里面没有。不同之处在于我们如何组合属性和事件,例如,
animationProperty.sampledBy(rendertickstream)