rx-java のサブプロジェクトである rx-scala を使用しています。私は Scala 構文を使用しますが、誰もが理解できることを願っています。
奇妙な動作に遭遇しましたが、それがバグなのか、rx オペレーターの誤用なのかわかりません。
問題文
私はox: Observable[X]とトリガーオブザーバブルを持っていtr: Observable[()]ます。function を使用しoyた変換であるオブザーバブルが必要ですが、潜在的に高価であるため、トリガーされた場合のみです。oxf: Function[X,Y]f
の最後の値に変換された値がない場合はox、 にoyなるはずですnull。
いくつかのコメント:
oxUIイベントの結果であるため、ホットです。oxprintlnデバッグで確認したように、正しく動作します (値とタイミングの両方) 。oy適切なタイミングで発火します。oxnull 以外の値の場合、の古い値を使用しているだけです。
現在のコード
oy = ox.sample(tr).map(f).merge(ox.map(x => null))
上記のコードの問題点は次のとおりです。最初は機能しますが、しばらくすると、 をトリガーするとtr、の古い値にoy適用されます。変更していないときは、繰り返しトリガーすると、結果が新しくなり、最終的に追いつきます。foxoxtr
mergeにリセットしないように を削除するnullと、すべてが正常に機能します (おそらく、効果が非決定論的に見えるため)。
質問
提示されたコードはバグがあります。
- 私が何か間違ったことをしているかどうか知りたいです。
- 必要なものを達成する別の方法を歓迎します。
ジャブの人々のために
- ジェネリック/型注釈:
ox: Observable[X]手段Observable<X> ox - ラムダ:
x => null手段x -> null