【问题标题】:Handing event-driven programming in Clojure/ClojureScript在 Clojure/ClojureScript 中处理事件驱动编程
【发布时间】:2012-04-01 22:06:13
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: events clojure clojurescript


    【解决方案1】:

    Clojurescript One 有一个库,one.dispatch 这是一个很好的起点。 wiki 有使用示例here

    【讨论】:

    • 它使用相同的原子概念来存储所有事件处理程序
    • 404 not found - 你知道它是否被移到别处了吗?
    【解决方案2】:

    截至 2013 年,在 clojure 中实现事件处理的最佳方式是出色的 core.async 库:

    core.async 以与Go 语言非常相似的方式使用通道启用事件驱动编程。

    【讨论】:

      【解决方案3】:

      如果您想实现这样的解决方案,那么更改 ref/atom 会很好,因为这是大多数 clojure 库等在需要存储在运行时存储/删除内容的情况时所做的。

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 2014-01-03
        • 2011-06-26
        • 2011-06-23
        • 1970-01-01
        相关资源
        最近更新 更多