2012-07-01 14 views
7

나는 Clojure에 꽤 새로 왔습니다. 나는 데이터베이스에서 결과의지도를 가지고 있으며 같은 키 값이 포함되어 내가지도에서 값을 검색하려는하지만 고유 제품 ID를 얻는 데 문제가키 이름에 공백이있는 Clojure 맵 키

{:Unique Product ID "09876" :ProductName "XYZ"} 

합니다.

ProductID (str (map-name ":Unique Product ID")) 

제품 이름은 잘 사용하여 작동 :

ProductName (str (map-name :ProductName")) 

나는 제품 ID 필드 키의 공간을 처리하는 방법을 모르겠어요. 지도에서 해당 키 값을 어떻게 검색해야합니까?

덕분에

답변

14

시도 (키워드 "고유 제품 ID")

+0

감사합니다 제프 - 일했다! 매우 감사!! – user1494355

7

공간 하지 키워드에 유효한 문자, 당신은 거의 확실하게 미래에 고통의 원인이됩니다 무언가를 위해 노력하고 있습니다.

키워드 기능은 입력 내용의 유효성을 검사하지 않으므로 @ jeff-johnston이 잘못되었습니다. 두려워요. 여기

길고 토론 :

https://groups.google.com/d/topic/clojure/WvXYkvLoQhI/discussion

clojuredocs 볼 여기에 논의 다음과 같은 새로운 문서화 문자열로 업데이트되었습니다 제프 표시로

http://clojuredocs.org/clojure_core/clojure.core/keyword

+0

오, 알아두면 좋을 것 같습니다. http://dev.clojure.org/jira/browse/CLJ-17에서 미래에 "임의 기호 지원"*이 구현 될 수도 있지만 관련 티켓을 찾을 수 없다고 제안합니다. –

0

당신은 (keyword)을 사용할 수 있습니다,하지만 난 당신을 생각 데이터베이스 쿼리에서 돌아온 맵을 공백이없는 키로 변환하면 일반적으로 더 나을 것입니다. 나는 목적으로이 기능이 유용 :

(defn despace [m] 
    (zipmap (map #(keyword (clojure.string/replace (name %) " " "_")) (keys m)) 
      (vals m))) 

이 그런 공간 대신에 밑줄을 사용

(:Unique_Product_ID (despace {(keyword "Unique Product ID") "09876" :ProductName "XYZ"})) 
#=> "09876"