0

前の値と着信イベントに基づいて新しい値を無限に生成する計算を考えると、それも失敗する可能性があります。これが 2 つObservableの を取得する最良の方法です。

  • 変換を成功させるには、無限の可能性があります。
  • エラー報告用?

詳細

イベントによって変更される状態を ScalaFX GUI からモデル化し、RXScala を初めて試しています。物事を単純化する:

trait State {
  def computeNext(basedOn: Any): State
}

sealed trait UserEvent // Has some case classes

class StateProcessor(initialState: State, events: Observable[UserEvent]) {
  ...
}

アイデアはObservable[State]、与えられた初期状態を作成し、イベントに基づいて次の状態に変更することです。簡単です:

val observableState = events.scan(initialState){(state, ev) =>
  // compute and return next state
  state computeNext ???
}

ここで実際の問題は、次の状態の計算には I/O が含まれ、失敗する可能性があるため、computeNext は Try[State] を返さなければならないことです。

trait State {
  def computeNext(basedOn: Any): Try[State]
}

明らかに、私はもう使用できませscanん。一般的に、私は2つの s を持ちたいですObservable:

class StateProcessor(initialState: State, events: Observable[UserEvent]) {
  val observableState: Observable[State] = ???
  val observableExc: Observable[Exception] = ???
}

Try[State]が失敗した場合、observableState単に何も発行せず、エラーも報告しないというルールを使用します。次の状態は、最後に成功した計算に基づいています。

この状況を解決する最もエレガントな方法はどれですか?

4

0 に答える 0