是否可以使用带有记录的命名空间关键字?

时间:2018-01-21 10:58:01

标签: clojure

在我的应用中,我需要一个优化助推器。 我注意到记录明显快于映射(可能是因为JVM使用本机类字段访问来访问记录'字段)

地图我正在将已使用的命名空间关键字替换为键

(def m {:app.core/k 1 })

我正在用

替换定义
(defrecord R [k])
(def m (->R 1))

代码是

(defn two [m] (assoc m :app.core/k 2))

不幸的是,当m是记录时运行此代码,它会关联一个新的命名空间密钥:app.core / k,这将不利于优化。

是否可以声明记录以使其使用namespaced关键字?

1 个答案:

答案 0 :(得分:0)

至少就我所知,没有这种可能性。只允许使用deftype / defrecord声明的非限定名称。

我不确定它是否会有所帮助,但仍然是:您可以使用标准#阅读器宏声明类型记录的实例,并在任何地图之前添加。所以你可能可以摆脱大多数构造函数:

(def m #some.ns.YourRecord {:foo 1 :bar 2 :baz 3})