2012-11-15 11 views
8

मैं क्लोजर के लिए कुल नौसिखिया हूं और मूल रूप से कुछ ट्यूटोरियल का पालन करने की कोशिश कर रहा हूं। मेरे पास defrecord एस के बारे में एक प्रश्न है। ,वैकल्पिक कुंजी के साथ defrecord

(defrecord somemap [key1 key2 key3 key4]) 

(defn give-me-map [m1 m2] 
    (somemap. m1 m2)) 

ऊपर कोड पर इतना है कि मैं अभ्यस्त उन्हें मान प्रत्येक समय देने के लिए की जरूरत है मैं, key3 और key4 वैकल्पिक के रूप में करना चाहते हैं:

यहाँ बात यह है कि मुझे क्या करना है कोशिश कर रहा हूँ एक somemap ऑब्जेक्ट बनाएं।

एक समान प्रश्न here है, लेकिन यह वही है जो मैं यहां करने की कोशिश कर रहा हूं।

तो क्या वैकल्पिक क्षेत्रों के साथ defrecord को परिभाषित करना संभव है?

+3

यदि आप क्लोजर के लिए कुल नौसिखिया हैं, तो आप अब डिफ्रॉर्ड और उसके चचेरे भाई को छोड़ना चाहेंगे। आप उनके बिना बहुत उपयोगी कोड लिख सकते हैं। – Cubic

उत्तर

8

जब आप (defrecord T [...]) का उपयोग करते हैं, तो दो कारखाने के फ़ंक्शन बनाए जाते हैं: ->T और map->T

पहले कुंजीपटल पैरामीटर कुंजी के रूप में उपयोग करता है। दूसरा रिकॉर्ड के लिए एक मनमाना मानचित्र लागू होता है।

आप निर्माता में key3 और key4 रख सकते हैं और map->somemap का उपयोग कर सकते हैं।

(defrecord somemap [key1 key2 key3 key4]) 

(defn give-me-map 
    [key1 key2] 
    (map->somemap {:key1 key1 :key2 key2})) 
6

चूंकि क्लोजर में रिकॉर्ड नक्शा इंटरफ़ेस को लागू करते हैं, इसलिए कन्स्ट्रक्टर में निर्दिष्ट किए गए सभी को छोड़कर सभी फ़ील्ड वैकल्पिक हैं।

तो, केवल key1 और key2 के साथ अपने रिकॉर्ड की घोषणा सही है: केवल key1 और key2 निर्माता में आवश्यक हो जाएगा, लेकिन आप आसानी से एक मूल्य associng द्वारा key3 या key4 (या किसी भी अन्य प्रमुख, उस बात के लिए) सेट कर सकते हैं उन्हें किसी अन्य मानचित्र की तरह रिकॉर्ड पर।

+0

अभिलेखों की मेरी समझ यह है कि नक्शा-> कन्स्ट्रक्टर का उपयोग करते समय सभी कुंजी वैकल्पिक हैं। उदाहरण के लिए देखें: '' (डिफ्रेकॉर्ड बार [ए बी सी]) (डीएफ आर (मानचित्र-> बार {: सी 30}) ;;; # my-ns.Bar {: एक शून्य,: बी शून्य,: सी 30} '' ' – nha

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