पाइपलाइनों को देखते हुए तो जैसे एक ->>
पाइपलाइन:सशर्त तत्वों >>
(defn my-fn []
(->> (get-data)
(do-foo)
(do-bar)
(do-baz)))
मैं विभिन्न चरणों सशर्त करना चाहते हैं। if
रूप में डालने के लिए ->>
मैक्रो प्रयास के रूप में
(defn my-fn [{:keys [foo bar baz]}]
(->> (get-data)
(if foo (do-foo) identity)
(if bar (do-bar) identity)
(if baz (do-baz) identity))
हालांकि, यह केवल प्रदर्शन के मामले में दुर्भाग्यपूर्ण लग रहा है (होने:
जो मन में आया था इस लेखन के पहले जिस तरह से इस तरह के रूप में था नोप identity
कॉल), लेकिन वास्तव में संकलन करने में विफल रहता है।
यह लिखने का उचित, उचित रूप से DRY तरीका क्या होगा?
क्या 'डेटा-डेटा' अनुक्रम लौटाता है जैसा आमतौर पर '- >>' के साथ उपयोग किया जाता है? क्या 'डू-फ़ंक्शन' साइड इफेक्ट्स कॉल करता है, या कुछ ले रहा/वापस कर रहा है? –
ऐसा लगता है कि अगर थ्रेडेड कॉल में किसी भी सराहनीय तरीके से प्रदर्शन को नुकसान पहुंचाएगा –
@AlexTaggart हां, 'get-data' अनुक्रम देता है - संभावित रूप से काफी लंबा, यह प्रभावी रूप से एक आंतरिक लूप बना देता है। 'Do- *' फ़ंक्शन शुद्ध हैं, जिनके दुष्प्रभाव नहीं हैं; शायद मैंने उदाहरण में कोड को खराब तरीके से नामित किया है। –