用于定义符号(例如函数,绑定等)时,星星是否具有特定含义?当我定义类似的东西时,它只是一个正常的绑定名称:
(def *clojure* "CLOJURE")
当我def
时,我进入了REPL:
警告:* clojure *未声明为动态,因此不能动态重新绑定,但其名称另有说明。请指示^:dynamic * clojure *或更改名称。
我在哪里可以阅读有关特殊字符和**等内容的更多信息?
答案 0 :(得分:5)
按惯例,带有“耳罩”的变量(即由* s括起来的)是动态变量,可以使用binding
和相关函数进行反弹,例如
(def ^:dynamic *dyn*)
(binding [*dyn* "Hello world!"]
(println *dyn*))
如果您以这种方式命名变量而不使其变为动态,则会收到您所看到的警告。
答案 1 :(得分:2)
检查clojure style guide。耳罩只是@Lee已经提到过的一种惯例。