2012-06-14 87 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的值的值。瓦雷知道它的價值,但不是相反。這當然是有意義的,因爲例如,相同的函數可能是零(對於本地函數)或多個變量的值。

相關問題