Events 在Clojure/ClojureScript中处理事件驱动编程

Events 在Clojure/ClojureScript中处理事件驱动编程,events,javascript-events,clojure,clojurescript,Events,Javascript Events,Clojure,Clojurescript,我试图理解如何在ClojureScript中建模事件。用JavaScript设计事件队列很容易。您只需保留一个(可变)函数数组,并提供辅助函数来添加或删除数组中的回调。触发事件时,只需遍历数组中列出的所有回调并逐个调用它们 这个范例与功能性风格相去甚远——例如,除非回调有副作用,否则触发回调是没有意义的。此外,它是使用可变数组实现的。但在我看来,在ClojureScript中,人们需要能够进行事件驱动编程,才能做任何有用的事情。现在,我知道googleclosure已经实现了一个事件库,但我的问

我试图理解如何在ClojureScript中建模事件。用JavaScript设计事件队列很容易。您只需保留一个(可变)函数数组,并提供辅助函数来添加或删除数组中的回调。触发事件时,只需遍历数组中列出的所有回调并逐个调用它们

这个范例与功能性风格相去甚远——例如,除非回调有副作用,否则触发回调是没有意义的。此外,它是使用可变数组实现的。但在我看来,在ClojureScript中,人们需要能够进行事件驱动编程,才能做任何有用的事情。现在,我知道googleclosure已经实现了一个事件库,但我的问题是如何在本地实现它

既然所有基本的Clojure/ClojureScript数据类型都是不可变的,那么实现这种机制的惯用方法是什么?换裁判?从主机求助于可变数据结构(Java resp JavaScript)


如果我理解正确,代理可能是Clojure的正确工具,但是我看到它们目前还没有在ClojureScript中实现。

如果您想实现这样的解决方案,就像大多数clojure库等在运行时需要一个存储来存储/删除内容时所做的那样,那么更改ref/atom就可以了。

有一个库,这是一个很好的起点。wiki有使用示例

截至2013年,在clojure中实现事件处理的最佳方法是使用优秀的
核心。异步
库:


core.async
以一种非常类似于
Go
语言的方式启用带有通道的事件驱动编程。

并且它使用相同的atom概念来存储所有未找到的事件句柄404-您知道它是否被移到了其他地方吗?