2010-09-15 40 views

回答

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

我无法想象一个更完整的答案,但只是为了好玩,我敢于有人想出它。 – 2010-09-15 15:55:57

+2

@Hamish也许加入'(源名)'? – ponzao 2010-09-15 18:05:47

+2

'名称'如何工作不应该是有趣的。文档字符串是合同。其他任何东西都是一个实现细节,不应该依赖。 – kotarak 2010-09-15 19:32:37

8

注意kotarak的答案将不会返回关键字的命名空间的一部分,只是名称的一部分 - 所以:

(name :foo/bar) 
>"bar" 

使用他的其他评论让你问什么:

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

实际上,获取关键字的命名空间部分同样简单:

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

注意,多段的命名空间是一个分开的,而不是‘/’

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

而且这还与命名空间限定关键字“”:

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

这也会给你来自关键字的字符串:

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

'str'在你的例子中不需要。 – Vincent 2018-01-01 12:57:33

相关问题