Respuestas:
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)?
namefunciona no debería ser de interés. La cadena de documentación es el contrato. Cualquier otra cosa es un detalle de implementación en el que no se debe confiar.
(name :foo/123/bar)es "bar". Si desea la ruta completa de una palabra clave que necesita usar subso algo como(str (namespace k) "/" (name k))
En realidad, es igual de fácil obtener la parte del espacio de nombres de una palabra clave:
(name :foo/bar) => "bar"
(namespace :foo/bar) => "foo"
Tenga en cuenta que los espacios de nombres con varios segmentos se separan con un '.', No con una '/'
(namespace :foo/bar/baz) => throws exception: Invalid token: :foo/bar/baz
(namespace :foo.bar/baz) => "foo.bar"
Y esto también funciona con palabras clave calificadas por espacio de nombres:
;; assuming in the namespace foo.bar
(namespace ::baz) => "foo.bar"
(name ::baz) => "baz"
Tenga en cuenta que la respuesta de kotarak no devolverá la parte del espacio de nombres de la palabra clave, solo la parte del nombre, así que:
(name :foo/bar)
>"bar"
El uso de su otro comentario le da lo que pidió:
(subs (str :foo/bar) 1)
>"foo/bar"
No es una tarea tediosa convertir cualquier tipo de datos en una cadena. Aquí hay un ejemplo usando 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
Esto también le dará una cadena de una palabra clave:
(str (name :baz)) -> "baz"
(str (name ::baz)) -> "baz"
strno es necesario en su ejemplo.