system.reactive – 在RX中Elm的Signal(Conal的行为)是什么? RX有这样一个概念吗?

我正在观看
this视频(见下图),这让我想知道Elm的Signal是否与Conal的
Behaviour相同.

我认为他们是一样的,但我不是百分百肯定.它们是一样的吗?

以下是一些相关问题:

1)RX中的榆树信号(Conal的行为)是什么?在RX中有这样的概念吗?也许ReplaySubject?

2)如何将RX Observable转换为RX中的信号(行为)?
Sodium中,为此目的存在保持功能.

3)在Elm中,RX的Observable(AFAIK RX的Observable对应于Conal的事件)是什么?榆树有这样的事吗?

谢谢阅读.

以下是表格中表达的问题:

来自榆树谈话的快照:

最佳答案 我相信上述问题的答案可能是您的初步假设是错误的.我相信可观察序列(更多)类似于行为和信号(在连续时间上变化,可以是无限的,默认是同步的). Conal似乎表明事件是某个时间点的特定状态,例如“正在发生” “在时间t0之后描述第一个左键按下的事件”[* 1]

|Rx            |Conal   |ELM   |
|--------------|--------|------|
|T             |Event   | ?    |
|IObservable<T>|Behavior|Signal|

我相信Conal描述中的事件是某个时间点的实际值.所以更具体一点,我认为这更准确

|Rx                         |Conal   |ELM   |
|---------------------------|--------|------|
|TimeStamp<T>               |Event   | ?    |
|ReplaySubject<TimeStamp<T>>|Behavior|Signal|

我相信这里的ReplaySubject< TimeStamp< T>>更接近地表示我理解的行为(包含状态和时间,可以在某个时间点获取值).然而,由于ReplaySubject实际上并不允许您从某个时间点拉出状态,因此它们并不像是喜欢.在我看来,EventStore是一个更接近的匹配.

因此,为了清楚起见,在我的理解中,可观察序列(Rx IObservable< T>)和Conal的行为在一定程度上共享类似的定义.它们都表示随时间变化的有序值序列.但是在Rx中,这是一个可观察的序列.记住Rx纯粹是一个允许您查询事件流的库.有一些功能允许您缓存数据(重放/缓冲)或使用数据窗口(Window / GroupJoin),您甚至可以使用时间戳(TimeStamp / TimeInterval)来丰富数据.

然而,当Conal的行为与可观察序列不同时,它具有持久性和历史查询的特征.据我了解,除了Rx的功能外,Conal的行为还指定您可以在任何给定的时间点获取序列的值.例如,在$1.23的时间00:00:01有一个价格勾选,然后在$2.34的00:00:05时间另一个价格勾选,消费者可以在00:00:02的时间要求价值并且会给出返回1.23美元的值(该时间点的最新值).

time         [t1   ]  [t2]  [t3]  [t4]  [t5   ]
prices   ----[$1.23]--------------------[$2.34]--->

price@t2 -------------[$1.23]|

Rx没有为此提供任何支持,但是人们可能会花很多时间编写自定义运算符来支持这一点.

//A forced example of querying historical data.
// Be carefull as Replay() uses an unbounded buffer!
var source = Observable.Interval(TimeSpan.FromMilliseconds(250))
        .Timestamp()
        .Replay();
var connection = source.Connect();

var time2 = DateTimeOffset.Now+TimeSpan.FromSeconds(2);
var valueAtTime2 = source.TakeWhile(ts=>ts.Timestamp <= time2)
                         .LastAsync();

valueAtTime2.Dump();    //LinqPad feature to output the result

可以(可以?)支持这种回顾性查询的系统可以是像CEP(复杂事件处理)引擎或EventStore样式数据库的系统.

[* 1]. http://conal.net/papers/icfp97/icfp97.pdf

点赞