2016-11-18 8 views
5

में प्रतीक हल करें मैं एक मूलभूत चीज़ पर फंस गया हूं। मैं एक नाम स्थान है जहाँ मैं कुछ परिभाषाओं है है:मैक्रो

(ns my-namespace) 

(def my-definition "HELLO") 
(def my-definition2 "HI") 

अब, मैं एक मैक्रो में my-namespace में वार्स के मूल्य का उपयोग करना चाहते हैं, लेकिन मैं गतिशील प्रतीकों प्राप्त करना चाहते हैं। जैसे,

(defmacro my-macro [n] 
    (-> "my-namespace/my-definition" symbol resolve var-get)) 

इस तरीके से एक प्रतीक प्राप्त कर रहा है एक समारोह में काम करता है (जब तक कि नाम स्थान भरी हुई है), लेकिन एक मैक्रो में नहीं।

मैक्रो में, प्रतीक को हल नहीं किया जा सकता है। मैंने उद्धरण और अनजान करने का प्रयास किया है लेकिन यह अभी भी काम नहीं करता है।

क्या मैक्रो में ऐसा प्रतीक बनने के प्रतीक का उपयोग करना संभव है? यदि हां, तो कैसे?

+3

'मेरी-namespace' से पहले' मेरी-macro' विस्तार किया जाता है लोड करने के लिए की जरूरत है। क्या ऐसा है? – OlegTheCat

+1

मैक्रो नेमस्पेस घोषणा के लिए '(आवश्यकता [my-namespace: संदर्भ: सभी]) की आवश्यकता है समस्या को हल किया। यदि आप उत्तर पोस्ट करते हैं तो आप उसमें रुचि रखते हैं, तो आप कुछ बिंदु @OlegTheCat स्कोर कर सकते हैं। –

उत्तर

2

प्रतीक, हल नहीं किया जा सकता है, क्योंकि नाम स्थान जहां यह परिभाषित किया गया है लोड नहीं है। आप

(require 'my-namespace) 

द्वारा या नाम स्थान घोषणा में नाम स्थान लोड कर सकते हैं:

(ns macro-expansion-ns 
    (:require [my-namespace])) 
3

इस एक का प्रयास करें:

(defmacro my-macro 
    [str] 
    (-> str symbol resolve deref)) 
+0

धन्यवाद। दुर्भाग्यवश यह नामस्थान की आवश्यकता के बिना काम नहीं करता है। –