मेरे पास एक मान 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