Réponses:
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
fonctionne ne devrait pas être d'intérêt. Le docstring est le contrat. Tout le reste est un détail de mise en œuvre sur lequel il ne faut pas se fier.
(name :foo/123/bar)
«bar». Si vous voulez le chemin complet d'un mot-clé que vous devez utiliser subs
ou quelque chose comme(str (namespace k) "/" (name k))
En fait, il est tout aussi facile d'obtenir la partie espace de noms d'un mot-clé:
(name :foo/bar) => "bar"
(namespace :foo/bar) => "foo"
Notez que les espaces de noms avec plusieurs segments sont séparés par un «.», Pas un «/»
(namespace :foo/bar/baz) => throws exception: Invalid token: :foo/bar/baz
(namespace :foo.bar/baz) => "foo.bar"
Et cela fonctionne également avec les mots-clés qualifiés d'espace de noms:
;; assuming in the namespace foo.bar
(namespace ::baz) => "foo.bar"
(name ::baz) => "baz"
Notez que la réponse de kotarak ne retournera pas la partie espace de nom du mot-clé, juste la partie nom - donc:
(name :foo/bar)
>"bar"
L'utilisation de son autre commentaire donne ce que vous avez demandé:
(subs (str :foo/bar) 1)
>"foo/bar"
Ce n'est pas une tâche fastidieuse de convertir un type de données en une chaîne, voici un exemple en utilisant 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
Cela vous donnera également une chaîne d'un mot-clé:
(str (name :baz)) -> "baz"
(str (name ::baz)) -> "baz"
str
n'est pas nécessaire dans votre exemple.