Comment convertir un mot clé clojure en une chaîne?


100

Dans mon application, j'ai besoin de convertir le mot-clé clojure par exemple. : nom_var dans une chaîne "nom_var". Des idées comment cela pourrait être fait?

Réponses:


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

3
Je ne peux pas imaginer une réponse plus complète, mais juste pour le plaisir, je vais défier quelqu'un de la trouver.
Hamish Grubijan

2
@Hamish Peut-être en ajoutant (source name)?
ponzao

2
Comment namefonctionne 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.
kotarak

3
Merci kotarak! J'adore ce Clojure chaque jour plus! C'est mon troisième jour.
Santosh

4
Peut-être que cette réponse devrait expliquer pourquoi (name :foo/123/bar)«bar». Si vous voulez le chemin complet d'un mot-clé que vous devez utiliser subsou quelque chose comme(str (namespace k) "/" (name k))
AnnanFay

13

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"

12

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"

0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.