在Clojure中,如何从变量或函数中获取名称字符串?

qiu*_*fei 7 clojure

我想得到一个变量的字符串表示.例如,

(def my-var {})
Run Code Online (Sandbox Code Playgroud)

如何"my-var"从符号中获取字符串my-var?和

(defn my-fun [] ...)
Run Code Online (Sandbox Code Playgroud)

如何"my-fun"从函数中获取字符串my-fun

num*_*_cn 11

user=> (def my-var {})
#'user/my-var
user=> (defn my-fun [] )
#'user/my-fun
user=> (name 'my-var)
"my-var"
user=> (name 'my-fun)
"my-fun"
user=> (doc name)
-------------------------
clojure.core/name
([x])
  Returns the name String of a string, symbol or keyword.
nil
Run Code Online (Sandbox Code Playgroud)


Tas*_*orn 8

Clojure中的每个Var都有:附加名称元数据.

user> (def my-var {})
#'user/my-var
user> (:name (meta #'my-var))
my-var
user> (let [a-var #'my-var]
        (:name (meta a-var)))
my-var
Run Code Online (Sandbox Code Playgroud)

但是,通常如果你已经拥有了Var,那么你已经知道了这个名字,通常你不会在程序中使用Vars(也就是说,你只需要传递my-var或my-fun而不是#'my-var和#"我的乐趣).

没有什么可以得到函数的Var(或var-name)或恰好是某些Var的值的值.Var知道它的价值,但不是相反.这当然是有意义的,因为例如,相同的函数可以是零(对于局部函数)或多个vars的值.