2010-09-15 30 views

Respuesta

147
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

No me puedo imaginar una respuesta más completa, pero solo por diversión, me atreveré a que alguien se le ocurra. –

+2

@Hamish ¿Quizás agregando '(nombre de fuente)'? – ponzao

+2

Cómo funciona 'name' no debería ser de interés. La docstring es el contrato. Cualquier otra cosa es un detalle de implementación, uno no debe confiar. – kotarak

8

Nota respuesta de que kotarak no devolverá la parte del espacio de nombres de palabras clave, sólo la parte del nombre - así:

(name :foo/bar) 
>"bar" 

Usando su otro comentario da lo que solicitó:

(subs (str :foo/bar) 1) 
>"foo/bar" 
11

En realidad, es tan fácil obtener la parte del espacio de nombre de una palabra clave:

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

Tenga en cuenta que espacios de nombres con múltiples segmentos se separan con una, no un '/'

(namespace :foo/bar/baz) => throws exception: Invalid token: :foo/bar/baz 
(namespace :foo.bar/baz) => "foo.bar" 

Y esto también funciona con el espacio de nombres de palabras clave cualificado '':

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

Esto también le dará una cadena desde una palabra clave:

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

' str' no es necesario en su ejemplo. – Vincent

Cuestiones relacionadas