^:dynamic 是原子关键字还是组合?

Is ^:dynamic an atomic keyword, or a combination?

^:dynamic的功能很明确(例如,参见clojure and ^:dynamic)。我的问题: ^:dynamic 是原子的,即不可分割的关键字吗?如果不是,以下任何一项是否也有效? operators/decorations ^: 添加到表达式中的是什么?

(def ^:dynamic y 5)    -- Valid (known).
(def dynamic y 5)      -- but the rest of these? ...
(def ^dynamic y 5)
(def :dynamic y 5)
(def ^: y 5)

或者,也许没有明确的答案:如果 ^:dynamic 是一个不可分割的关键字,为什么要在上面附加所有有趣的标点符号?

这个声明

(def ^:dynamic x 5)

相当于

(def ^{:dynamic true} x 5)

一般来说^后面跟一个关键字或者map就是一个metadatareader宏。如果后面跟一个关键字,它会在对象的元数据映射中将该关键字设置为 true。

总而言之:^:dynamic 不是 "indivisible" 关键字;它是一个元数据 reader 宏,后跟一个普通关键字(在本例中为 :dynamic)。