私は変数の文字列表現を取得したいと思います。例えば、記号my-var
から列"my-var"
を取得する方法をClojureでは、変数または関数から名前文字列を取得する方法は?
(def my-var {})
?機能から文字列"my-fun"
を取得する方法と
(defn my-fun [] ...)
?
私は変数の文字列表現を取得したいと思います。例えば、記号my-var
から列"my-var"
を取得する方法をClojureでは、変数または関数から名前文字列を取得する方法は?
(def my-var {})
?機能から文字列"my-fun"
を取得する方法と
(defn 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"
は、関数やマクロ名では動作しませんClojureの中けれども、多分誰かが私を助けることができる
=> (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)
すべてのVaRはあります付属の名前のメタデータを。
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と#' my-funよりも)。
関数のVar(またはvar-name)や、ある種のVarの値となる値は、何もありません。 Varはその価値を知っていますが、それ以外の方法はありません。例えば、非常に同じ関数がゼロ(ローカル関数の場合)または複数の変数の値であってもよいため、当然意味がある。