我想獲取變量的字符串表示形式。例如,在Clojure中,如何從變量或函數中獲取名稱字符串?
(def my-var {})
如何從符號my-var
字符串"my-var"
?而
(defn my-fun [] ...)
如何從功能字符串"my-fun"
?
我想獲取變量的字符串表示形式。例如,在Clojure中,如何從變量或函數中獲取名稱字符串?
(def my-var {})
如何從符號my-var
字符串"my-var"
?而
(defn my-fun [] ...)
如何從功能字符串"my-fun"
?
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
這個怎麼樣?
(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)
每瓦爾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的值的值。瓦雷知道它的價值,但不是相反。這當然是有意義的,因爲例如,相同的函數可能是零(對於本地函數)或多個變量的值。