假设我有一个事件触发器,我想在触发时做两件事。首先,我希望它更新一些行为的价值。其次,如果满足其他条件,我希望它使用更新的行为值触发另一个事件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值,我的意思是该值包括刚刚应用于它的触发器的更新。
不幸的是,如果我理解正确,行为的语义是这样的,更新的值不会立即提供给我,所以我在这里唯一的选择本质上是复制工作并重新计算更新的行为值,以便我可以立即使用它在另一种情况下,即填写?????? 有类似的东西
send_off =
flip updateFromTrigger
<$>
behavior
<@>
filterE conditionFromTrigger trigger
现在,在某种意义上,我可以通过使用 Discrete 而不是 Behavior 立即使行为中的更新信息对我可用,但这实际上等同于给我一个与我的原始事件同时触发的事件使用更新的值,除非我错过了一些东西,否则反应香蕉不会让我只有在其他两个事件同时触发时才能触发事件;也就是说,它提供事件的并集,但不提供交集。
所以我有两个问题。首先,我对这种情况的理解是否正确,特别是我是否正确得出结论,我的上述解决方案是解决它的唯一方法?其次,纯粹出于好奇,开发者有没有关于如何处理事件交叉点的想法或计划?