2012-06-14 6 views

Odpowiedz

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

Co powiesz na to?

(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" 

nie działa dla nazwy funkcji lub makro choć, być może ktoś może mi pomóc

=> (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

Każdy Var w Clojure jest: nazwa metadanych załączeniu.

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 

Zwykle jednak, jeśli masz już Var, to już wiesz nazwę tak, i zazwyczaj nie używać Vars w programie (czyli po prostu przekazać my-my-var lub raczej zabawa niż # 'my-var i #' my-fun).

Nie ma nic, aby uzyskać Var (lub nazwę-zmiennej) funkcji lub wartość, która jest wartością niektórych Var. Var zna swoją wartość, ale nie na odwrót. Ma to oczywiście sens, ponieważ np. Ta sama funkcja może być wartością zerową (dla funkcji lokalnych) lub wieloma zmiennymi.

Powiązane problemy