116 votes

Comment convertir un mot-clé clojure en une chaîne de caractères ?

Dans mon application, je dois convertir un mot-clé clojure, par exemple :var_name, en une chaîne de caractères "var_name". Avez-vous une idée de la façon dont cela peut être fait ?

187voto

kotarak Points 11177
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 votes

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

3 votes

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

2 votes

Comment name ne devraient pas présenter d'intérêt. La docstring est le contrat. Tout le reste est un détail d'implémentation, sur lequel il ne faut pas compter.

18voto

txmikester Points 21

En fait, il est tout aussi facile d'obtenir la partie espace de nom d'un mot-clé :

(name :foo/bar)  => "bar"
(namespace :foo/bar) => "foo"

Notez que les espaces de noms comportant plusieurs segments sont séparés par un '.' et non par 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 nom :

;; assuming in the namespace foo.bar
(namespace ::baz) => "foo.bar"  
(name ::baz) => "baz"

15voto

Rafael Munitić Points 307

Notez que la réponse de kotarak ne retournera pas la partie espace de noms du mot-clé, seulement 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"

-1voto

Satyam Ramawat Points 41

Ce n'est pas une tâche fastidieuse de convertir n'importe quel type de données en chaîne de caractères, 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

-3voto

matt whatever Points 1

Cela vous donnera également une chaîne de caractères à partir d'un mot-clé :

(str (name :baz)) -> "baz"
(str (name ::baz)) -> "baz"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X