में एक namespace योग्य समारोह नाम बनाओ मैं कार्यों कि करने के लिए और कुछ कोड को बाह्य सिस्टम द्वारा परिभाषित से नक्शा का एक समूह है:एक मैक्रो
(defn translate-from-ib-size-tick-field-code [val]
(condp = val
0 :bid-size
3 :ask-size
5 :last-size
8 :volume))
(defn translate-to-ib-size-tick-field-code [val]
(condp = val
:bid-size 0
:ask-size 3
:last-size 5
:volume 8))
मैं दोहराव को दूर करने के लिए मैक्रो करना चाहते हैं :
#_ (translation-table size-tick-field-code
{:bid-size 0
:ask-size 3
:last-size 5
:volume 8})
मैं इस तरह मैक्रो शुरू कर दिया:
(defmacro translation-table [name & vals]
`(defn ~(symbol (str "translate-to-ib-" name)) [val#]
(get [email protected] val#)))
जिसके परिणामस्वरूप समारोह शरीर सही लगता है, लेकिन समारोह का नाम गलत है:
re-actor.conversions> (macroexpand `(translation-table monkey {:a 1 :b 2}))
(def translate-to-ib-re-actor.conversions/monkey
(.withMeta (clojure.core/fn translate-to-ib-re-actor.conversions/monkey
([val__10589__auto__]
(clojure.core/get {:a 1, :b 2} val__10589__auto__))) (.meta ...
मैं चाहूँगा "का अनुवाद करने के लिए ib-", नाम स्थान के लिए एक उपसर्ग के बजाय, समारोह नाम के हिस्से के रूप में प्रदर्शित करने के रूप में यह पता चला।
मैं क्लोजर मैक्रोज़ के साथ ऐसा कैसे कर सकता हूं? अगर मैं इसे गलत कर रहा हूं और किसी कारण से मैक्रोज़ का उपयोग नहीं करना चाहिए, तो कृपया मुझे बताएं, लेकिन मैं यह जानना चाहूंगा कि इस तरह के फ़ंक्शन नाम कैसे बनाएं ताकि सामान्य रूप से क्लोजर और मैक्रोज़ की मेरी समझ में सुधार हो सके। । धन्यवाद!
धन्यवाद, यह वही है जो मैं दोनों बिंदुओं पर देख रहा था। –