我应该如何处理Rx.Net中的侧流?

时间:2016-07-07 20:21:57

标签: c# system.reactive rx.net

我正在使用Rx.Net构建模拟。用户输入被建模为初始状态的状态转换流。使用Scan我能够将这些转换解析为当前状态。

问题是转换可能有副作用。这些被建模为实现ISimulationEvent的事件对象。

我尝试过几种方法:

  • 将副作用存储在当前状态对象中并使用每次转换清除它们
  • Tuple
  • 中返回IList<ISimulationEvent>个游戏状态和Scan
  • 传递副作用回调以汇总它们

每个解决方案感觉&#34; hacky&#34;。

使用Rx.Net是否有一种干净的方法来实现它?

这是我的命令如何折叠成状态的一个例子:

var commands = mouseStates
    .DistinctUntilChanged(mouseState => mouseState.LeftButton)
    .Where(mouseState => mouseState.LeftButton == ButtonState.Pressed)
    .Select(mouseState => new CreateWidgetCommand(new Vector2(mouseState.X, mouseState.Y)));

var initialState = new SimulationState();

var states = commands.Scan(
    initialState, 
    (state, command) => command.CanApply(state) ? command.Apply(state) : state);

每个Apply都应输出ISimulationEvent的流作为副作用。但是,我还需要保留结果SimulationState

0 个答案:

没有答案