在我的应用中,我需要一个优化助推器。 我注意到记录明显快于映射(可能是因为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关键字?
答案 0 :(得分:0)
至少就我所知,没有这种可能性。只允许使用deftype / defrecord声明的非限定名称。
我不确定它是否会有所帮助,但仍然是:您可以使用标准#
阅读器宏声明类型记录的实例,并在任何地图之前添加。所以你可能可以摆脱大多数构造函数:
(def m #some.ns.YourRecord {:foo 1 :bar 2 :baz 3})