^:dynamic
的功能是明确的(例如,参见clojure and ^:dynamic)。我的问题:^:dynamic
是一个原子,即不可分割的关键词吗?如果没有,以下任何一项也有效吗?运算符/装饰^
和:
添加到表达式中的是什么?
(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
是不可分割的关键字,为什么要将所有有趣的标点符号附加到它?
答案 0 :(得分:5)
此声明
(def ^:dynamic x 5)
相当于
(def ^{:dynamic true} x 5)
一般来说,^
后跟关键字或地图是metadata读者宏。其后跟一个关键字,它在对象的元数据映射中将该关键字设置为true。
总结一下:^:dynamic
不是“不可分割的”关键字;它是元数据读取器宏,后跟普通关键字(在这种情况下为:dynamic
)。