Scala 合并采样的可观测数据时出现的问题
我正在使用RXScala,它是RXJava的一个子项目。我将使用Scala语法,希望大家都能理解 我遇到了奇怪的行为,我不知道这是一个错误还是代表我滥用了rx操作符 问题陈述 我有一个Scala 合并采样的可观测数据时出现的问题,scala,rx-java,rx-scala,Scala,Rx Java,Rx Scala,我正在使用RXScala,它是RXJava的一个子项目。我将使用Scala语法,希望大家都能理解 我遇到了奇怪的行为,我不知道这是一个错误还是代表我滥用了rx操作符 问题陈述 我有一个ox:Observable[X]和一个触发器Observabletr:Observable[()]。我想要一个可观察的oy,它是使用函数f:function[X,Y]对ox的转换,但只有在触发时,因为f可能很昂贵 如果ox的最后一个值没有转换值,则oy应为null 一些评论: ox是热的,因为它是UI事件的结果
ox:Observable[X]
和一个触发器Observabletr:Observable[()]
。我想要一个可观察的oy
,它是使用函数f:function[X,Y]
对ox
的转换,但只有在触发时,因为f
可能很昂贵
如果ox
的最后一个值没有转换值,则oy
应为null
一些评论:
是热的,因为它是UI事件的结果ox
行为正确(值和计时),正如我用ox
调试检查的那样println
在正确的时间开火;它只是使用过时的值oy
,而不是空值ox
tr
时,oy
将f
应用于ox
的旧值。当不更改ox
时,如果我反复触发tr
,结果会更新并最终赶上
如果我删除了合并
以不重置为null
,那么一切都正常(可能是因为效果不确定)
问题
我的代码有缺陷
- 泛型/类型注释:
表示ox:Observable[X]
Observable-ox
- lambdas:
表示x=>null
x->null
tr.withLatestFrom(ox)((_,x) => f(x)) merge problem.map(_ => null)
你能把它翻译成普通的Java吗?@akarnokd我为Java的人添加了一个部分,尽管我怀疑这是否真的必要。我认为在代码行中,您只需将
=>
替换为->
。假设这里的merge()是RxJava中的mergeWith(),那么如果ox是冷的,您就要加倍消耗ox,对于它的每一个值,您都会发出null,并且在触发时可能会发出一个转换值,这可能会失去同步。@akarnokd我检查了rx scala的源代码,而merge
正在使用可观察的静态。另外,据我所知,ox
非常热门,因为它是GUI事件(在X
上编辑)的结果。上面的链中涉及一些缓冲区:sample()中的序列化和merge的前端缓冲区。tr到底是什么?如果map()在触发值的发射方面异步运行,则延迟效应可能会发生。
tr.withLatestFrom(ox)((_,x) => f(x)) merge problem.map(_ => null)