मेरे पास एक ऐसा फ़ंक्शन है जो एक नक्शा लौटाता है। चाबियाँ स्थिर हैं, लेकिन मान सशर्त हैं। इस तरह:मैं निश्चित कुंजी और सशर्त मूल्यों के साथ क्लोजर मानचित्र कैसे वापस कर सकता हूं?
(defn map-returning-function [x y]
{:a (if (some-test-fn x) "one value" "other value"
:b (if (some-test-fn x) 15 25
:c (if (different-test y) :one :two})
वहाँ प्रत्येक मान के लिए if
परीक्षण लिखने के लिए जरूरत के बिना इस लक्ष्य को हासिल करने के लिए कुछ और अधिक सुरुचिपूर्ण रास्ता नहीं है? केवल अन्य तरह से मैं के बारे में सोच सकते हैं
(defn another-map-returning-function [x y]
(if (some-test-fn x)
{:a "one value", :b 15, :c (if (different-test y) :one :two)}
{:a "other value" :b 25, :c (if (different-test y) :one :two)}))
है जो मेरे लिए काफी बेहतर प्रतीत नहीं के बाद से यह सशर्त की प्रत्येक शाखा के लिए कुंजी नाम को दोहराता है और यह different-test
पर समारोह कॉल की दोहराता है। और स्वर्ग ने मना किया कि मुझे केवल if
की बजाय cond
की आवश्यकता है।
आप निश्चित रूप से कुछ चालाक कोड है कि अगर समाप्त .... लेकिन यह सिर्फ तीन या चार वर्णों को लिखने से बचने के लिए वास्तव में लायक एक अतिरिक्त अविवेक और/या जटिलता है लिख सकते हैं ?? यह एक ऐसा मामला हो सकता है जहां आपको केआईएसएस सिद्धांत लागू करना चाहिए। – mikera
@ मिकरा: मैं इस मामले में आपके साथ सहमत हूं लेकिन समझता हूं कि मैंने एक प्रश्न के हिस्से के रूप में इसे स्पष्ट करने के लिए थोड़ा सा उदाहरण सरल बनाया है। मैं थोड़ी उम्मीद कर रहा था कि कोई पागल मैक्रो स्किज़ को बाहर निकाल देगा और मुझे दिखाएगा कि यह कैसे हुआ। – stand