回答:
user=> (doc name)
-------------------------
clojure.core/name
([x])
Returns the name String of a string, symbol or keyword.
nil
user=> (name :var_name)
"var_name"
(source name)
?
name
機能するかは重要ではありません。docstringはコントラクトです。それ以外は実装の詳細であり、信頼すべきではありません。
(name :foo/123/bar)
「バー」であるかを説明するべきです。使用する必要のあるキーワードの完全なパスなどが必要subs
な場合(str (namespace k) "/" (name k))
実際、キーワードの名前空間部分を取得するのも同じくらい簡単です。
(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"
コタラックの答えはキーワードの名前空間の部分を返さず、名前の部分だけを返すことに注意してください。
(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
これにより、キーワードの文字列も得られます。
(str (name :baz)) -> "baz"
(str (name ::baz)) -> "baz"
str
あなたの例では必要ありません。