2010-09-15 11 views

Odpowiedz

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

Nie mogę sobie wyobrazić bardziej kompletnej odpowiedzi, ale dla zabawy odważę się, aby ktoś wymyślił to. –

+2

@Hamish Być może dodając '(nazwa źródła)'? – ponzao

+2

Sposób działania imienia "nazwa" nie powinien być przedmiotem zainteresowania. Docstring jest umową. Coś jeszcze jest szczegółem implementacji, na którym nie należy polegać. – kotarak

8

Uwaga odpowiedź, że kotarak nie zwróci część przestrzeni nazw słów kluczowych, tylko nazwa część - tak:

(name :foo/bar) 
>"bar" 

wykorzystaniem jego drugim komentarzu daje to, co prosiłeś:

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

W rzeczywistości równie łatwo można uzyskać część nazwy słowa kluczowego:

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

Zauważmy, że przestrzenie nazw z wieloma segmentami są oddzielone, a nie «/»

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

I to działa również z nazw wykwalifikowani słowa kluczowe „”:

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

To również daje ciąg znaków od słowa kluczowego:

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

' str' nie jest potrzebne w twoim przykładzie. – Vincent

Powiązane problemy