मैं एक नोयर वेबपैप बना रहा हूं, और मुझे गतिशील रूप से नए विचार और मॉडल बनाने की आवश्यकता है। मैं नोयर उदाहरणों का पालन कर रहा हूं, जिसमें संसाधन के लिए दृश्य और नियंत्रक के पास अलग-अलग नामस्थान हैं, और मैंने इसे एक बहुत ही साफ दृष्टिकोण पाया है।गतिशील रूप से बनाए गए नेमस्पेस में फ़ंक्शंस जोड़ने का कोई साफ तरीका है?
इसके साथ में, मुझे गतिशील रूप से दृश्यों और मॉडलों के अनुरूप नए नामस्थान बनाने में सक्षम होना चाहिए, और उसके बाद उचित कार्यों को प्रशिक्षित करना होगा। मेरा विचार था कि मैक्रोज़ को एक अलग नेमस्पेस में निर्दिष्ट किया गया था, जिसे नए नामस्थान में बुलाया जाने पर उचित मार्ग/आंशिक/जो कुछ भी प्रदान किया जाएगा।
उदाहरण के लिए (मेरी पहली defmacro माफ):
(ns project.views.proto
(:use noir.core
hiccup.core
hiccup.element
hiccup.form))
(defmacro def-all-page
[path]
`(defpage ~path []
(html
[:h1 "Ya'll here"])))
से कहा जाता है ...
(ns project.proto
(:use [clojure.contrib.with-ns :only [with-ns]])
(create-ns 'foo)
(intern 'foo 'path "path") ; In reality, the path is dynamic which is why I intern it
(with-ns 'foo
(clojure.core/refer-clojure)
(use 'noir.core
'hiccup.core
'hiccup.element
'[project.views.proto :only [def-all-page]])
(def-all-page path)
हालांकि, मेरी नई नाम स्थान के भीतर से इस बुला मुझे एक NullPointerException देता है। मैं किसी भी मदद की सराहना करता हूं, और बेहतर दृष्टिकोण है या नहीं। जैसे, बस एक नामस्थान के लिए संदर्भ का उपयोग जिसमें सभी आवश्यक परिभाषाएं शामिल हैं?
पहला पोस्ट, और मुझे नहीं लगता कि यह this का दोहराव है। धन्यवाद!
क्या आप अपनी पोस्ट को संपादित करने और अपने नाम स्थान और कुछ नमूना क्लोजर कोड को इंगित करने पर विचार करेंगे जो मैक्रो को आमंत्रित करता है? मैं देखना चाहता हूं कि इसका किस संदर्भ में उपयोग किया जाता है। टीएनएक्स – octopusgrabbus
मुझे आशा है कि यह थोड़ा और सहायक होगा। – jtmoulia
मुझे जो त्रुटि मिल रही है वह प्रतीक को हल करने में असमर्थ है: इस संदर्भ में साथ-साथ, संकलन, लेकिन मुझे नहीं पता कि इसका मतलब है कि आप किसी फ़ंक्शन या मैक्रो के बाहर-ns का उपयोग कर सकते हैं। – octopusgrabbus