是^:动态是原子关键字,还是组合?

时间:2015-03-11 08:58:40

标签: clojure

^: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是不可分割的关键字,为什么要将所有有趣的标点符号附加到它?

1 个答案:

答案 0 :(得分:5)

此声明

(def ^:dynamic x 5)

相当于

(def ^{:dynamic true} x 5)

一般来说,^后跟关键字或地图是metadata读者宏。其后跟一个关键字,它在对象的元数据映射中将该关键字设置为true。

总结一下:^:dynamic不是“不可分割的”关键字;它是元数据读取器宏,后跟普通关键字(在这种情况下为:dynamic)。