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

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

这种范式远非函数式风格-例如,除非它们具有副作用,否则没有触发回调的意义。此外,它使用可变数组实现。尽管如此,似乎在ClojureScript中做任何有用的事情都需要能够进行事件驱动编程。我知道Google Closure已经实现了一个事件库,但我的问题是关于本地实现它。

由于所有基本的Clojure/ClojureScript数据类型都是不可变的,那么实现此机制的惯用方法是什么?更改ref?求助于来自宿主(Java resp JavaScript)的可变数据结构?

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

3个回答

5

它使用相同的原子概念来存储所有事件处理程序。 - Ankur
404页面未找到 - 你知道它是否已经移动到其他地方了吗? - Matt Moran

2
截至2013年,在Clojure中实现事件处理的最佳方式是出色的core.async库: core.async使用通道实现事件驱动编程,类似于Go语言。

1

如果您想要实现这样的解决方案,更改ref/atom是可以的,因为大多数Clojure库在需要在运行时存储/删除内容的情况下都会这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接