आप पुस्तकालय नाम और वर्ग पता करने की जरूरतचीजों को ठीक से काम करने के लिए नाम। मान लें कि आप दोनों जानते हैं, नीचे दिया गया उदाहरण को तुरंत चालू करेगा और doStuff
पर कॉल करेगा।
library test;
import "dart:mirrors";
class TestClass {
doStuff() => print("doStuff was called!");
}
main() {
MirrorSystem mirrors = currentMirrorSystem();
LibraryMirror lm = mirrors.libraries['test'];
ClassMirror cm = lm.classes['TestClass'];
Future tcFuture = cm.newInstance('', []);
tcFuture.then((InstanceMirror im) {
var tc = im.reflectee;
tc.doStuff();
});
}
इस समाधान के बारे में कुछ नोट:
- पुस्तकालय
test
हम से पहले से ही वी एम, जो इस मामले में थोड़ा आसान बना देता है में आयात किया जाता है वर्ग लोड करने के लिए कोशिश कर रहे हैं।
- कॉल
newInstance
कन्स्ट्रक्टर को पैरामीटर पास करने की अनुमति देता है। स्थितित्मक तर्क लागू किए जाते हैं, लेकिन नामित पैरामीटर अभी तक लागू नहीं किए गए हैं (एम 2 रिलीज के रूप में)।
newInstance
Future देता है ताकि इसे isolates पर काम करने की अनुमति मिल सके।
'newInstance' 'भविष्य' वापस नहीं करता है क्योंकि कक्षा को तुरंत चालू करने के लिए एसिंक ऑपरेशन की आवश्यकता हो सकती है, यह सच नहीं है, सबकुछ पहले ही लोड हो चुका है। यह एक 'भविष्य' देता है क्योंकि मिरर एपीआई जानबूझकर असीमित है, क्योंकि यह भविष्य में अलग-अलग काम करेगा (और पार-पृथक संचार हमेशा असीमित होता है)। यदि आप सावधानी से 'नया प्रवेश' आमंत्रण (और 'get/setField' या' invoke' 'जैसे अन्य लोगों का सावधानीपूर्वक निरीक्षण करते हैं, तो आप ध्यान देंगे कि हुड के तहत, यह सिंक्रनाइज़ रूप से काम करता है। यह भविष्य में स्पष्ट रूप से बदल सकता है। – Ladicek
धन्यवाद Ladicek। मैंने जवाब अपडेट कर लिया है। – Kyrra
नोट: जावास्क्रिप्ट में संकलित होने पर यह काम नहीं कर सकता है। डार्ट 2 जेएस कंपाइलर अभी तक मिरर का पूरी तरह से समर्थन नहीं करता है। –