在clojure符号中的星星

时间:2015-11-21 12:25:41

标签: clojure

用于定义符号(例如函数,绑定等)时,星星是否具有特定含义?当我定义类似的东西时,它只是一个正常的绑定名称:

(def *clojure* "CLOJURE")

当我def时,我进入了REPL:

警告:* clojure *未声明为动态,因此不能动态重新绑定,但其名称另有说明。请指示^:dynamic * clojure *或更改名称。

我在哪里可以阅读有关特殊字符和**等内容的更多信息?

2 个答案:

答案 0 :(得分:5)

按惯例,带有“耳罩”的变量(即由* s括起来的)是动态变量,可以使用binding和相关函数进行反弹,例如

(def ^:dynamic *dyn*)

(binding [*dyn* "Hello world!"]
  (println *dyn*))

如果您以这种方式命名变量而不使其变为动态,则会收到您所看到的警告。

答案 1 :(得分:2)

检查clojure style guide。耳罩只是@Lee已经提到过的一种惯例。