【发布时间】:2012-01-26 22:22:40
【问题描述】:
假设我有一个事件trigger,我想在触发时做两件事。首先,我希望它更新一些行为的价值。其次,如果满足其他条件,我希望它触发另一个具有 updated 行为值的事件 send_off。以代码形式表示,假设我有
trigger :: Event b
trigger = ...
updateFromTrigger :: b -> (a -> a)
updateFromTrigger = ...
conditionFromTrigger :: b -> Bool
conditionFromTrigger = ...
behavior :: Behavior a
behavior = accumB initial_value (updateFromTrigger <$> trigger)
send_off :: Event a
send_off = ?????? (filterE conditionFromTrigger trigger)
那么问题来了:我在??????以便 send_off 发送最新的 behavior 值,我的意思是包含来自 trigger 的更新的值应用到它。
不幸的是,如果我理解正确,行为的语义是更新的值不能立即提供给我,所以我在这里唯一的选择本质上是复制工作并重新计算更新的行为值,以便我可以立即在另一个事件中使用它,即填写??????像
send_off =
flip updateFromTrigger
<$>
behavior
<@>
filterE conditionFromTrigger trigger
现在,在某种意义上,我可以通过使用 Discrete 而不是 Behavior 立即使我可以使用行为中的更新信息,但这实际上相当于给我一个与具有更新值的原始事件同时触发的事件,除非我错过了某些东西,否则响应式香蕉不会给我一种方法来触发一个事件,只有当其他两个事件同时触发时;也就是说,它提供事件的并集,但不提供交集。
所以我有两个问题。首先,我对这种情况的理解是否正确,特别是我是否正确得出结论,我的上述解决方案是解决它的唯一方法?其次,纯粹出于好奇,开发者有没有关于如何处理事件交叉点的想法或计划?
【问题讨论】:
标签: haskell reactive-programming frp reactive-banana