如何将clojure关键字转换为string?

在我的应用程序,我需要转换clojure关键字例如。 :var_name成一个string“var_name”。 任何想法如何可以做到?

user=> (doc name) ------------------------- clojure.core/name ([x]) Returns the name String of a string, symbol or keyword. nil user=> (name :var_name) "var_name" 

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

 (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" 

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

 (name :foo/bar) >"bar" 

使用他的其他评论给你所要求的:

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

这也会给你一个关键字的string:

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