Clojure - core.async 变化元
Clojure - core.async vary-meta
我在 ClojureScript 中多次看到这样的代码:
(apply async/put! port (vary-meta val assoc :key *val*) args)
我不明白 vary-meta
和 async/put!
一起重复使用,为什么需要它?
例如 CircleCI frontend code and ninjudd/eventual。
基本上他们使用 core.async 作为异步事件系统,并且他们在元数据中注释他们用于带有 id 的事件的值。
在 CircleCI 架构的情况下,他们使用它的目的之一是在输入控件控制的任何操作的结果完成(或错误或其他)时更新输入控件的状态。
您可以通过查看 forms namespace 了解其工作原理。 uuid 实例是在 wrap-managed-button-handler 的第 49 行创建的。您可以在 frontend.controls
命名空间中找到调用 release-button!
的事件处理代码示例。
当事件处理程序处理事件时,它们将 frontend.async/*uuid*
绑定到与事件值关联的 uuid,以便相关的多方法可以访问它。你可以在 frontend.core.
中看到这个
p.s。我尝试包含更多链接,但我在 Whosebug 上的声誉不够。
我在 ClojureScript 中多次看到这样的代码:
(apply async/put! port (vary-meta val assoc :key *val*) args)
我不明白 vary-meta
和 async/put!
一起重复使用,为什么需要它?
例如 CircleCI frontend code and ninjudd/eventual。
基本上他们使用 core.async 作为异步事件系统,并且他们在元数据中注释他们用于带有 id 的事件的值。
在 CircleCI 架构的情况下,他们使用它的目的之一是在输入控件控制的任何操作的结果完成(或错误或其他)时更新输入控件的状态。
您可以通过查看 forms namespace 了解其工作原理。 uuid 实例是在 wrap-managed-button-handler 的第 49 行创建的。您可以在 frontend.controls
命名空间中找到调用 release-button!
的事件处理代码示例。
当事件处理程序处理事件时,它们将 frontend.async/*uuid*
绑定到与事件值关联的 uuid,以便相关的多方法可以访问它。你可以在 frontend.core.
p.s。我尝试包含更多链接,但我在 Whosebug 上的声誉不够。