2016-10-11 7 views
7

कहो मैं निम्नलिखित ऐनक है साथ Clojure युक्ति का उपयोग करना:Datomic संस्थाओं

(s/def :person/age number?) 
(s/def :person/name string?) 

(s/def ::person (s/keys :req [:person/name :person/age])) 

तब मैं Datomic से एक इकाई लाने:

(def person-entity (d/entity (d/db conn) [:person/name "Mr entity"])) 

अगर मैं कल्पना यह कारण विफल रहता है के साथ अनुरूपता की जाँच करने के लिए प्रयास करें संस्थाएं नक्शे नहीं हैं:

(s/explain ::person person-entity) 

val: #:db{:id 17592186069950} fails spec: :some-ns/person predicate: map? 

मेरे ऐप में ऐसे कार्य हैं जो तर्कों के रूप में संस्थाएं लेते हैं और एक विकास में काम करने के लिए spec instrumentation प्राप्त करने के लिए बस हर जगह नक्शे पर इकाइयों को सुधारने के लिए शून्य।

मुझे spec के माध्यम से इकाइयों को मान्य करने के बारे में कैसे जाना चाहिए?

+1

अच्छा सवाल। इस समस्या का हल ढूंढने के बाद, क्या आप नेमस्पेस के साथ किसी समस्या में भी भाग नहीं पाएंगे? इकाई मानचित्र कुछ ऐसा होगा: '{: व्यक्ति/नाम" श्री Entity "}', जो '(s/keys: req [:: name :: age]) के खिलाफ _not_ मान्य नहीं करता है, जब तक कि ये परिभाषाएं न हों '(एनएस व्यक्ति) 'में। लेकिन यह आपको शीर्ष स्तर के पैकेज नामस्थानों का एक गुच्छा परिभाषित करने के लिए मजबूर करता है, जो उचित प्रतीत नहीं होता है। – Marc

+0

धन्यवाद @Marc, मैंने उदाहरण अपडेट किया है। – Odinodin

उत्तर

3

हालांकि यह सच है कि आपके नामस्थान थोड़ा दूर हैं (आपको इसका उपयोग करना चाहिए: नाम/नाम के बजाय व्यक्ति/नाम), वहां भी स्पेस में प्रतिबंध लगाया जा सकता है। वर्तमान में एस/कुंजी की आवश्यकता है कि सभी इनपुट संग्रह clojure.core/keys पूर्वानुमान के अनुरूप हों। डेटामिक इकाइयां नक्शे नहीं हैं, और इसलिए उस चेक को पास न करें (और इसलिए map? भविष्यवाणी के बारे में त्रुटि)।

मैंने यहां एक बग रिपोर्ट दायर की है: http://dev.clojure.org/jira/browse/CLJ-2041 यदि आप चाहें तो टिकट को ऊपर उठाने के लिए स्वतंत्र महसूस करें।

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