मैं किसी निर्देशिका में मिली कुछ फ़ाइलों के आधार पर किसी दिए गए मॉड्यूल में गतिशील रूप से कुछ नए प्रकार जोड़ना चाहता हूं।हक्स में, आप मैक्रोज़ के साथ मॉड्यूल में प्रकार/कक्षा कैसे जोड़ते हैं?
मैं अनिवार्य रूप से मॉड्यूल के नीचे @:file(...)
एम्बेड कक्षाओं का एक समूह तैयार करने की कोशिश कर रहा हूं।
//This is the module I'm targeting to append embedded ByteArray subtypes (see below)
@:build(macros.AutoEmbed.build("some/folder/"))
class Embeds {
//Empty on purpose, just let the Macro do its thing!
}
// At "macro-time", it should generate these:
@:file("some/folder/ui_main.xml")
class UI_MAIN_XML extends flash.utils.ByteArray { }
@:file("some/folder/config.template.json")
class CONFIG_TEMPLATE_JSON extends flash.utils.ByteArray { }
क्या मैं अब तक पता लगाने के लिए कर लिया है मैं Embeds.hx
मॉड्यूल को बदलने के लिए हो सकता है है। तो मैंने Context.getModule(Context.getLocalModule())
में देखा। मैंने TypeDefinition
में भी देखा है क्योंकि यह स्क्रैच से एक नए प्रकार को परिभाषित करने का एकमात्र तरीका लगता है।
Context.getModule(...)
के साथ समस्या यह है कि यह एक सरणी Array<Type>
, नहीं Array<TypeDefinition>
देता है, इसलिए मैं यह करने के लिए नए TypeDefinition
संलग्न नहीं कर सकते हैं (प्लस मैं यह पता लगाने कैसे उन, ughh लिखने के लिए है)। यह शायद मेरे हिस्से पर एक बुरा धारणा है, लेकिन मैंने सोचा कि TypeDefinition
में बस इसे जोड़कर मैं गतिशील रूप से मॉड्यूल में अधिक प्रकार प्रदान कर सकता हूं।
मै मैक्रोज़ के लिए अभी भी बहुत नया हूं जैसा कि आप बता सकते हैं!
संपादित
यह सच है कि मैं सिर्फ गतिशील लिख सकता है/के साथ एक FileSystem/फ़ाइल संकलन समय में एक नई Embeds.hx
फ़ाइल को अधिलेखित समाधान लिखते हैं, लेकिन यह है कि पहले कम से कम एक बार संकलित करने के लिए की आवश्यकता होगी, का तात्पर्य अपने आईडीई का ऑटो-पूर्णता जेनरेट Embeds.*
कक्षाएं (मेरे मामले में फ्लैशडिफायर) उठा सकता है। इसके अलावा परिभाषित फ़ोल्डर में किसी भी समय नई फाइलें गिरा दी जाती हैं, एक ही समस्या: आईडीई इसे पहचानने से पहले आपको पहले संकलित करने की आवश्यकता होती है। हां, मुझे वास्तव में ऑटो-पूर्णता पसंद है :)
अच्छा और पूरा कोड-उदाहरण
यहाँ एक मैक्रो जो केवल एक ही प्रकार और एक इसी क्षेत्र उत्पन्न होगा है! धन्यवाद। हालांकि प्रश्न, 'मैक्रो क्लास टीएमपी' से 'टीएमपी' कहां से आता है haxe.io.BytesData' भाग बढ़ाता है? और क्या मैं अभी भी Flash.utils.ByteArray का विस्तार कर सकता हूं हक्स के संस्करण के बजाय (दोनों के बीच अंतर के बारे में निश्चित नहीं है ...)? – bigp
मैं एक डमी क्लास नाम का उपयोग करता हूं क्योंकि मुझे यह नहीं पता था कि डायनामिक वैल्यू का उपयोग कैसे करें ... बाइट्सडाटा फ्लैश बाइटएरे के समान है - आप शायद इसका भी उपयोग कर सकते हैं। – Philippe