web-dev-qa-db-ja.com

clojureキーワードを文字列に変換する方法は?

私のアプリケーションでは、clojureキーワードを変換する必要があります。 :var_nameを文字列「var_name」に変換します。どのようにそれを行うことができますか?

96
Santosh
user=> (doc name)
-------------------------
clojure.core/name
([x])
  Returns the name String of a string, symbol or keyword.
nil
user=> (name :var_name)
"var_name"
160
kotarak

実際、キーワードの名前空間部分を取得するのも簡単です。

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

Kotarakの答えは、キーワードの名前空間部分ではなく、名前部分のみを返すことに注意してください。

(name :foo/bar)
>"bar"

彼の他のコメントを使用すると、あなたが求めたものが得られます:

(subs (str :foo/bar) 1)
>"foo/bar"
11
Rafael Munitić

任意のデータ型を文字列に変換するのは面倒な作業ではありません。ここに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
0
Satyam Ramawat