मेरे पास एक मान a
है जो nil
हो भी सकता है और नहीं भी।
मेरे पास कार्यों का एक समूह है (मेरे नियंत्रण से बाहर) जिसे a
के मान के साथ पहले पैरामीटर के रूप में बुलाया जाना चाहिए यदि यह nil
नहीं है। यदि यह nil
है, तो फ़ंक्शन को a
के बिना कॉल किया जाना चाहिए।
के बजाए:
(defn my-fn [x]
(if a
(beyond-my-control-fn a x)
(beyond-my-control-fn x)))
मैं कुछ ऐसा करना चाहता हूं:
(defn my-fn [x]
(add-argument-if-not-nil-> a (beyond-my-control-fn x)))
क्या कोई मैक्रो है जो मुझे इसे पहले से ही करने की अनुमति देता है या मुझे अपना खुद का बनाना चाहिए?
1
siltalau
5 नवम्बर 2017, 14:00
2 जवाब
सबसे बढ़िया उत्तर
मावबोजो का जवाब सही है। मैं पैरामीटर के रूप में सरल कार्यों के व्यक्तिगत नापसंद के कारण मैक्रो के साथ गया था।
(defmacro nn-> [x form]
(if x
`(-> ~x ~form)
`~form))
यह मुझे इसे इस तरह उपयोग करने की अनुमति देता है:
(nn-> a (beyond-my-control-fn x))
(nn-> a (beyond-my-control-fn x y z))
जो, मेरे लिए, अधिक सुरुचिपूर्ण है।
1
siltalau
6 नवम्बर 2017, 11:30
आप अपने नियंत्रण से बाहर के कार्यों की कॉलिंग को किसी अन्य फ़ंक्शन के साथ लपेट सकते हैं
(defn call-with-a-if-not-nil
[f a & args]
(if (nil? a)
(apply f args)
(apply f a args)))
नमूने:
(call-with-a-if-not-nil beyond-my-control-fn a x)
(call-with-a-if-not-nil beyond-my-control-fn-1 a v w)
5
Stephen Cagle
6 नवम्बर 2017, 19:16