多分あなたが行うことができます:REPLで
(defn process-var [param]
{(-> param meta :name keyword)
@param})
:
user> (def x "fourty two")
#'user/x
user> (process-var #'x)
{:x "fourty two"}
user> (def y 1001)
#'user/y
user> (map (comp process-var (ns-interns *ns*)) '(x y))
({:x "fourty two"} {:y 1001})
user> (map (comp process-var (ns-interns *ns*)) '(x y process-var))
({:x "fourty two"} {:y 1001} {:process-var #function[user/process-var]})
も名前空間のシンボルテーブルからVaRのストレートを取ることができます。
(defn by-name
([name-symbol] (by-name name-symbol *ns*))
([name-symbol ns]
{(keyword name-symbol)
(deref (ns-resolve ns name-symbol))}))
user> (by-name 'x)
{:x "fourty two"}
user> (by-name 'map 'clojure.core)
{:map #function[clojure.core/map]}
user> (by-name '*clojure-version* 'clojure.core)
{:*clojure-version* {:major 1, :minor 8, :incremental 0, :qualifier nil}}
本当にClojureの 'var'が必要ですか?あるいは単にマップにkvペアを追加しようとしていますか? http://swannodette.github.io/2014/12/17/whats-in-a-var/ – jmargolisvt
@jmargolisvtはKVペアを追加することもできます。しかし、私はキーがvarの名前と同じ名前であることを望みます。 –
その使用例を含めてください。値を持つvarを作成するかどうかは、var名をキーワードとしたマップと、ある式の値(例:リテラルまたはs式)とのあいだにあいまいです。どうか明らかにしてください。 –