मैं क्लोजर में रिकॉर्ड बना रहा हूं और कुछ फ़ील्ड को डिफ़ॉल्ट मान के साथ सेट करना चाहता हूं। मैं यह कैसे कर सकता हूँ?क्लोजर में रिकॉर्ड्स में फ़ील्ड के लिए डिफ़ॉल्ट मान कैसे सेट करें?
13
A
उत्तर
10
आप बहुत आसानी से एक रिकॉर्ड करने के लिए प्रारंभिक मान पारित कर सकते हैं जब आप हालांकि एक विस्तार नक्शा यह निर्माण: (
(defrecord Foo [])
(def foo (Foo. nil {:bar 1 :baz 2}))
इस के प्रकाश में, मैं आमतौर पर एक निर्माता समारोह है कि कुछ मूलभूत मूल्यों में विलीन हो जाती है बनाते हैं तो आप जो जैसा चाहें ओवरराइड कर सकते हैं):
(defn make-foo [values-map]
(let [default-values {:bar 1 :baz 2}]
(Foo. nil (merge default-values values-map))))
(make-foo {:fiz 3 :bar 8})
=> #:user.Foo{:fiz 3, :bar 8, :baz 2}
20
एक कन्स्ट्रक्टर फ़ंक्शन का उपयोग करें।
(defrecord Foo [a b c])
(defn make-foo
[& {:keys [a b c] :or {a 5 c 7}}]
(Foo. a b c))
(make-foo :b 6)
(make-foo :b 6 :a 8)
बेशक विभिन्न भिन्नताएं हैं। उदाहरण के लिए आप कुछ फ़ील्ड को गैर-वैकल्पिक और डिफ़ॉल्ट के बिना आवश्यक कर सकते हैं।
(defn make-foo
[b & {:keys [a c] :or {a 5 c 7}}]
(Foo. a b c))
(make-foo 6)
(make-foo 6 :a 8)
वाईएमएमवी।
1
एक ही प्रश्न होने के बाद, मैंने एक मैक्रो का उपयोग करके एक ही परिभाषा में defrecord और कारखाने को लपेटकर समाप्त कर दिया।
मैक्रो:
(defmacro make-model
[name args & body]
(let [defaults (if (map? (first body)) (first body) {})
constructor-name (str/lower-case (str "make-" name))]
`(do (defrecord ~name ~args [email protected](if (map? (first body)) (rest body) body))
(defn ~(symbol constructor-name)
([] (~(symbol constructor-name) {}))
([values#] (~(symbol (str "map->" name)) (merge ~defaults values#)))))))
प्रयोग
(make-model User [firstName lastName] {:lastName "Smith"})
=> #'user/make-user
(make-user {:firstName "John"})
=> #user.User{:firstName "John", :lastName "Smith"}
संबंधित मुद्दे
- 1. मैं Django मॉडल में अन्य फ़ील्ड के मान के लिए डिफ़ॉल्ट फ़ील्ड मान कैसे सेट करूं?
- 2. क्लोजर मानचित्र में डिफ़ॉल्ट मान
- 3. वर्तमान पंक्ति से jqgrid में फॉर्म जोड़ने के लिए डिफ़ॉल्ट फ़ील्ड मान कैसे सेट करें
- 4. तालिका फ़ील्ड का डिफ़ॉल्ट मान 0.00 पर कैसे सेट करें?
- 5. डेटाकंट्रैक्ट में डिफ़ॉल्ट मान सेट करें?
- 6. क्लोजर में रेफ मैप में रिकॉर्ड्स कैसे अपडेट करें?
- 7. Magento - व्यवस्थापक फ़ील्ड के लिए डिफ़ॉल्ट मान
- 8. इनपुट फ़ील्ड का मान सेट करें
- 9. आइटम सूची के लिए डिफ़ॉल्ट मान कैसे सेट करें?
- 10. इकाई फ्रेमवर्क माइग्रेशन में आवश्यक फ़ील्ड के लिए डिफ़ॉल्ट मान?
- 11. सिम्फनी में, फ़ॉर्म फ़ील्ड का मान कैसे सेट करें?
- 12. .NET कंसोल ऐप में डिफ़ॉल्ट इनपुट मान कैसे सेट करें?
- 13. एनोटेशन के फ़ील्ड के लिए डिफ़ॉल्ट शून्य मान सेट करने में त्रुटि
- 14. स्थिति के लिए डिफ़ॉल्ट मान सेट करें, Magento में कर वर्ग
- 15. फ़ंक्शन में डिफ़ॉल्ट मान सेट करना?
- 16. Winform में DataGridViewComboBoxCell मान के लिए सेट डिफ़ॉल्ट मान कैसे दिखाएं?
- 17. समय के लिए डिफ़ॉल्ट मान जोड़ें (7) फ़ील्ड
- 18. सेट डिफ़ॉल्ट मान
- 19. किसी फ़ील्ड के लिए डिफ़ॉल्ट मान बदलने के लिए माइग्रेशन और सभी मौजूदा रिकॉर्ड के मान को नए डिफ़ॉल्ट मान में बदल दें, अगर उसके पास पुराना डिफ़ॉल्ट मान हो।
- 20. Django AdminForm फ़ील्ड डिफ़ॉल्ट मान
- 21. उद्देश्य-सी किसी प्रॉपर्टी के लिए डिफ़ॉल्ट मान सेट करें
- 22. किसी संपत्ति के लिए डिफ़ॉल्ट मान सेट करें
- 23. MongoDB: रिकॉर्ड्स के लिए क्वेरी कैसे करें जहां फ़ील्ड शून्य है या सेट नहीं है?
- 24. पीजीएडमिन के माध्यम से अनुक्रम को डिफ़ॉल्ट मान के रूप में कैसे सेट करें?
- 25. ड्रूपल सीसीके तिथि: डेटटाइम फ़ील्ड के डिफ़ॉल्ट मान को फ़िक्स तिथि पर कैसे सेट करें?
- 26. आर में एनयूएलएल के रूप में स्लॉट के डिफ़ॉल्ट मान को कैसे सेट करें?
- 27. मल्टीइलेक्ट, डिफ़ॉल्ट चयनित मान सेट करें
- 28. क्लोजर डेफ्टाइप में परिवर्तनीय फ़ील्ड?
- 29. ईएफ सीएफ में पीओसीओ के लिए डिफ़ॉल्ट मान कैसे सेट करें?
- 30. xcode 4.0 में कोर डेटा विशेषता के लिए डिफ़ॉल्ट मान कैसे सेट करें?
लिंक जो * के उपयोग बताते हैं: कुंजी * और *: या * http://stuartsierra.com/2010/01/15/ कीवर्ड-तर्क-इन-क्लोजर – leeor
कोई भी 'नक्शा-> Foo' और/या '-> Foo' का उपयोग भी कर सकता है' (defn make-foo [& args] (map-> Foo (args {: a 5 में : बी 1: सी 7})) (मेक-फू {: बी 3}) '- यह कुछ विनाशकारी बचाता है – birdspider