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.