【问题标题】:What does "#queue" mean in (def empty-queue #queue [])?(def empty-queue #queue []) 中的“#queue”是什么意思?
【发布时间】:2017-04-20 17:58:48
【问题描述】:

阅读re-frame的源码,无意中发现this line

(def empty-queue #queue [])

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

【问题讨论】:

  • 我认为它可能是一个阅读器标签,但不确定它的用途是什么?我自己从来没有使用过这些标签...

标签: function clojure clojurescript re-frame


【解决方案1】:

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

ClojureScript 存储库中src/main/clojure/cljs/tagged_literals.cljs 中此阅读器的具体定义,引用自*cljs-data-readers* definition below;它将[] 从向量转换为cljs.core.PersistentQueue

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


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

【讨论】:

  • 为什么我要使用这样的标记文字而不是直接使用cljs.core.PersistentQueue.EMPTY
  • 简洁?它非常像语法糖。
  • 我明白了。谢谢,这就解释了!
  • @CharlesDuffy 对于 EDN 或 cljc 之类的东西也有意义,其中与 cljs 不同的语言可能具有队列结构,但当然不会具有 cljs.core.PersistentQueue。一个 clj-jvm 项目可以为使用 clojure.core.PersistentQueue 的#queue 定义一个阅读器标签。
  • @amalloy 所以这也可以被认为是一种语法糖,因为我仍然可以使用#?(:clj ... :cljs ...) 在 .clj 和 .cljs 中获得所需的队列类型。不过,EDN 用例更有趣。
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多