Clojure:引用命名空间的名称

chr*_*ris 13 namespaces clojure

在Clojure中,如何获取命名变量和函数的命名空间的名称?例如,改进以下内容:

(ns my-ns)

(def namespace-name "my-ns")
Run Code Online (Sandbox Code Playgroud)

上面的问题是,如果我想更改my-ns的名称,我还必须更改namespace-name的定义

chr*_*ris 14

亚瑟答案的简单修改效果很好.

(def namespace-name (ns-name *ns*))
Run Code Online (Sandbox Code Playgroud)

但是我想警告Clojure初学者

(defn namespace-name [] (ns-name *ns*))
Run Code Online (Sandbox Code Playgroud)

因为*ns*是动态绑定的,所以不能用于此问题.

  • 但是沿着这条线(defmacro defns-name [name]`(def~name(ns-name*ns*)))然后调用(defns-name namespace-name)就行了. (2认同)

Art*_*ldt 8

当前命名空间存储在

*ns* 
Run Code Online (Sandbox Code Playgroud)

由于您的函数在运行时被评估,因此当您调用它时,您将获得*ns*的值.

所以如果您想要保存它的副本.