1

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と、すべてが正常に機能します (おそらく、効果が非決定論的に見えるため)。

質問

提示されたコードはバグがあります。

  1. 私が何か間違ったことをしているかどうか知りたいです。
  2. 必要なものを達成する別の方法を歓迎します。

ジャブの人々のために

  • ジェネリック/型注釈:ox: Observable[X]手段Observable<X> ox
  • ラムダ:x => null手段x -> null
4

1 に答える 1