clojure 키워드를 문자열로 변환하는 방법은 무엇입니까?


100

내 응용 프로그램에서 예를 들어 clojure 키워드를 변환해야합니다. : var_name을 문자열 "var_name"으로 변환합니다. 어떻게 할 수 있는지 아이디어가 있습니까?

답변:


166
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
더 완전한 대답을 상상할 수는 없지만 재미로 누군가 감히 대답 할 것입니다.
Hamish Grubijan

2
@Hamish 아마도 추가하여 (source name)?
ponzao

2
어떻게 name작품을 관심 안된다. 독 스트링은 계약입니다. 그 밖의 것은 구현 세부 사항이므로 의존해서는 안됩니다.
kotarak

3
감사합니다 kotarak! 나는이 Clojure를 매일 더 사랑하고있다! 이번이 3 일째입니다.
Santosh

4
아마도이 대답은 왜 (name :foo/123/bar)"bar" 인지 설명 할 것 입니다. 당신은 키워드의 전체 경로를 원하는 경우에 당신은 사용할 필요가 subs또는 뭔가처럼(str (namespace k) "/" (name k))
AnnanFay

13

실제로 키워드의 네임 스페이스 부분을 얻는 것도 쉽습니다.

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

12

kotarak의 대답은 키워드의 네임 스페이스 부분을 반환하지 않고 이름 부분 만 반환합니다.

(name :foo/bar)
>"bar"

그의 다른 의견을 사용하면 요청한 내용이 제공됩니다.

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

0

데이터 유형을 문자열로 변환하는 것은 지루한 작업이 아닙니다. 다음은 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

-2

이것은 또한 키워드의 문자열을 제공합니다.

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

2
str귀하의 예에서는 필요하지 않습니다.
Vincent Cantin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.