2017-01-15 10 views
7

मैं clojure.spec को आजमाने का प्रयास कर रहा हूं, और एक विचार यह है कि इसका उपयोग कैसे किया जाए, यह है कि मैं निर्दिष्ट मैप के उदाहरण को संपादित करने के लिए यूआई उत्पन्न करना चाहता हूं। उदाहरण के लिए, यह डेटपिकर फ़ील्ड के साथ एक वेब फॉर्म उत्पन्न कर सकता है जो एक कुंजी के लिए निर्दिष्ट है, उस तरह की चीज़।clojure.spec मानों के साथ मेटाप्रोग्रामिंग?

लाइब्रेरी में get-spec विधि है, लेकिन ऐसा लगता है कि ऐसे कोई फ़ंक्शन नहीं हैं जो मुझे आवश्यकतानुसार विनिर्देशों के आधार पर संचालित करते हैं। क्या नक्शा स्पेक लेने जैसी चीजों को करने का कोई तरीका है और वेक्टर के रूप में उस मानचित्र के लिए आवश्यक कुंजी वापस प्राप्त करें? Clojure.spec के इच्छित उपयोग मामले के बाहर विनिर्देशों के साथ इस प्रकार का मेटाप्रोग्रामिंग है?

उत्तर

7

चश्मे के साथ मेटाप्रोग्रामिंग निश्चित रूप से clojure.spec के इच्छित उपयोग मामले में है।

हमने अभी तक जारी नहीं किया है (लेकिन लिखा है और इरादा है) चश्मा खुद के रूप में चश्मे के रूप में। इनके साथ, एक spec रूप को स्वयं अनुरूप बनाना संभव है और spec का प्रतिनिधित्व करने वाली डेटा संरचना को वापस लेना संभव है (उदाहरण के लिए), मानचित्र spec से आवश्यक कुंजी को पकड़ें।

user=> (s/def ::name string?) 
:user/name 
user=> (s/def ::m (s/keys :req [::name])) 
:user/m 
user=> (s/conform ::spec (s/form ::m)) 
[:form {:s clojure.spec/keys, :args {:req [[:key :user/name]]}}] 

तब आप उस संरचना से बाहर चाबियों का सेट बांधना सकता है:

एक :: कल्पना कल्पना के साथ अनुरूप कुछ इस तरह लग सकता है।

+1

ग्रेट, मुझे यह सुनकर खुशी हुई कि यह एक योजनाबद्ध विशेषता है - मैं कई तरीकों से सोच सकता हूं जिसमें यह काफी उपयोगी होगा! –

संबंधित मुद्दे