在clojure符号中的星星

0 clojure

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

(def *clojure* "CLOJURE")
Run Code Online (Sandbox Code Playgroud)

就像我def这样我进入REPL:

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

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

Lee*_*Lee 5

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

(def ^:dynamic *dyn*)

(binding [*dyn* "Hello world!"]
  (println *dyn*))
Run Code Online (Sandbox Code Playgroud)

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