私のアプリケーションでは、clojureキーワードを変換する必要があります。 :var_nameを文字列「var_name」に変換します。どのようにそれを行うことができますか?
user=> (doc name)
-------------------------
clojure.core/name
([x])
Returns the name String of a string, symbol or keyword.
nil
user=> (name :var_name)
"var_name"
実際、キーワードの名前空間部分を取得するのも簡単です。
(name :foo/bar) => "bar"
(namespace :foo/bar) => "foo"
複数のセグメントを持つ名前空間は、「/」ではなく「。」で区切られていることに注意してください
(namespace :foo/bar/baz) => throws exception: Invalid token: :foo/bar/baz
(namespace :foo.bar/baz) => "foo.bar"
また、これは名前空間修飾キーワードでも機能します。
;; assuming in the namespace foo.bar
(namespace ::baz) => "foo.bar"
(name ::baz) => "baz"
Kotarakの答えは、キーワードの名前空間部分ではなく、名前部分のみを返すことに注意してください。
(name :foo/bar)
>"bar"
彼の他のコメントを使用すると、あなたが求めたものが得られます:
(subs (str :foo/bar) 1)
>"foo/bar"
任意のデータ型を文字列に変換するのは面倒な作業ではありません。ここにstrを使用した例を示します。
(defn ConvertVectorToString []
(let [vector [1 2 3 4]]
(def toString (str vector)))
(println toString)
(println (type toString)
(let [KeyWordExample (keyword 10)]
(def ConvertKeywordToString (str KeyWordExample)))
(println ConvertKeywordToString)
(println (type ConvertKeywordToString))
(ConvertVectorToString) ;;Calling ConvertVectorToString Function
Output will be:
1234
Java.lang.string
10
Java.lang.string