“#queue”在(def empty-queue #queue [])中是什么意思?

What does "#queue" mean in (def empty-queue #queue [])?

阅读 re-frame 的源代码,我偶然发现 this line:

(def empty-queue #queue [])

什么是#queue?有什么作用?

#queue [] 是一个 tagged literal#queue 使用 *data-readers*queue 成员来转换或解释 [].

这个reader的具体定义在src/main/clojure/cljs/tagged_literals.cljs in the ClojureScript repository, referenced from the *cljs-data-readers* definition below; it transforms [] from a vector into a cljs.core.PersistentQueue.

另请参阅 https://cljs.github.io/api/syntax/queue-literal

上的文档

Clojure 和 ClojureScript 中的持久队列结构允许高效地推送到一端并从另一端弹出——这与列表和向量相反,列表和向量仅在从同一侧推送和弹出时才有效。