2012-06-14 90 views

回答

12
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 
1

这个怎么样?

(defn symbol-as-string [sym] (str (second `(name ~sym))) 

=> (def my-var {}) 
#'user/my-var 
=> (symbol-as-string my-var) 
"my-var" 
=> (symbol-as-string 'howdy) 
"howdy" 

不会为函数或宏名的工作,虽然,也许有人可以帮我

=> (symbol-as-string map) 
"[email protected]" 
=> (symbol-as-string defn) 
java.lang.Exception: Can't take value of a macro: #'clojure.core/defn (NO_SOURCE_FILE:31) 
7

每瓦尔Clojure中有:名称的元数据连接。

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 

然而,通常如果你已经拥有了无功,那么你已经知道这个名字,无论如何,而且通常你不会在程序中使用瓦尔(即,你只是通过我的-VAR或我的乐趣,而比#'my-var和#'我的乐趣)。

没有什么可以获得函数的Var(或var-name)或碰巧是某个Var的值的值。瓦雷知道它的价值,但不是相反。这当然是有意义的,因为例如,相同的函数可能是零(对于本地函数)或多个变量的值。

相关问题