2012-07-01 10 views
7

में रिक्त स्थान के साथ क्लोजर मानचित्र कुंजी मैं क्लोजर के लिए बिल्कुल नया हूं। मैं एक डेटाबेस से परिणाम का एक नक्शा है और यह इस तरह के रूप कुंजी मान हैं:कुंजी नाम

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

मैं नक्शे से मान प्राप्त करना चाहते हैं, लेकिन मैं समस्याओं अनोखा उत्पाद ID हो रही हो रहा है।

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

उत्पाद का नाम ठीक का उपयोग कर काम करता है:

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

मैं कैसे उत्पाद ID फ़ील्ड कुंजी में अंतरिक्ष को संभालने के लिए यकीन नहीं है। मानचित्र से उस कुंजी के लिए मुझे मूल्य कैसे प्राप्त करना चाहिए?

धन्यवाद

उत्तर

14

कोशिश (मुख्य शब्द "अनन्य उत्पाद आईडी")

+0

धन्यवाद जेफ - कि काम किया! बहुत सराहना की!! – user1494355

7

अंतरिक्ष नहीं एक कीवर्ड में मान्य वर्ण नहीं है, तो आप कुछ है कि लगभग निश्चित रूप से भविष्य में दर्द का कारण होगा करने के लिए कोशिश कर रहे हैं।

ध्यान दें कि कीवर्ड फ़ंक्शन इसके इनपुट को मान्य नहीं करता है, इसलिए @ जेफ-जॉनस्टन गलत है, मुझे डर है।

लंबी यहाँ चर्चा:

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

clojuredocs कि चर्चा यहाँ देख निम्नलिखित नई docstrings साथ अद्यतन किया गया था:

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"