कक्षा घोषित किए बिना वस्तु बनाना संभव है? जावास्क्रिप्ट obj = {a: '1'}; console.log(obj.a)
कक्षा घोषित किए बिना वस्तु बनाना संभव है?
उत्तर
ग्रोवी में आपको हमेशा एक वस्तु का वर्ग प्रदान करना होगा, इसलिए जावास्क्रिप्ट के ऑब्जेक्ट-शाब्दिक वाक्यविन्यास में ग्रोवी में कोई समकक्ष नहीं है।
हालांकि, ग्रोवी के पास Map
के लिए एक शाब्दिक वाक्यविन्यास है, जो संकल्पनात्मक रूप से जावास्क्रिप्ट ऑब्जेक्ट के समान ही है, यानी दोनों गुणों या नाम-मूल्य जोड़े का संग्रह हैं।
ऊपर जावास्क्रिप्ट के बराबर ग्रूवी कोड है:
def obj = [a: '1']
println obj.a
हालांकि कोई वर्ग यहां इस्तेमाल आप अभी भी एक विशेष वर्ग (java.util.LinkedHashMap
) की एक वस्तु बना रहे हैं नाम नहीं है। उपरोक्त कोड सिर्फ के लिए आशुलिपि है:
def obj = new LinkedHashMap();
obj.a = '1'
println obj.a
Expando
class शायद और भी अधिक JavaScript ऑब्जेक्ट के समान है, और उपयोगी है जब आप एक वर्ग को परिभाषित करने के "भूमि के ऊपर" से बचने के लिए, या करने के लिए एक गतिशील वस्तु चाहते हैं करना चाहते हैं जो रनटाइम पर किसी भी मनमानी संपत्ति को जोड़ा जा सकता है।
थोड़ा आश्चर्यचकित है कि किसी ने एक्सपोन्डो क्लास का उल्लेख नहीं किया है। यह एक मानचित्र पर अतिरिक्त कार्यक्षमता जोड़ता है जिसमें आप सीधे अपने कार्यों के भीतर गुणों का संदर्भ दे सकते हैं। नीचे कोड उदाहरण।
def expando = new Expando(a:"def")
expando.run = {def b ->
println("$a")
println("$b")
}
expando.run("ABC")
def map = [a:"def"]
map.run = {def b ->
println("$a") //THIS DOES NOT WORK. You will get a missing property exception.
println("$b")
}
map.run("ABC")
मुद्रित आउटपुट:
डीईएफ़
एबीसी
groovy.lang.MissingPropertyException
एबीसी (आप map.run में println ($ क) बाहर टिप्पणी करता है, तो , println ($ बी) एबीसी प्रिंट करता है)
अतिरिक्त लाइन ब्रेक को अनदेखा करें आउटपुट में लगातार लाइनों पर डीफ़ और एबीसी डालने का समय था।
संपादित करें: एपीआई लिंक
ग्रेट मिल! शानदार श्री हाकी ने एक्सपोन्डो क्लास के बारे में भी लिखा है: http://mrhaki.blogspot.com/2009/10/groovy-goodness-expando-as-dynamic-bean.html मैं कहूंगा कि एक्सपोन्डो क्लास वास्तव में है क्या पूछा जा रहा था इसका जवाब। – Henrik
- 1. क्या सी # में कक्षा के बिना ऑब्जेक्ट बनाना संभव है?
- 2. क्या इसे लागू किए बिना कक्षा घोषित करना संभव है? (C++)
- 3. पायथन: प्रारंभकर्ता को कॉल किए बिना कक्षा उदाहरण बनाना
- 4. कक्षा वस्तु
- 5. क्या कन्स्ट्रक्टर को कॉल किए बिना जावा में किसी ऑब्जेक्ट का उदाहरण बनाना संभव है?
- 6. क्या फोरैच का उपयोग किए बिना इस कथन को फिर से बनाना संभव है?
- 7. क्या ऐप्पल उत्पादों के बिना आईफोन ऐप बनाना संभव है?
- 8. बनाना InetAddress वस्तु जावा
- 9. सी ++ वस्तु उपclasses के बिना?
- 10. क्या पोर्टेबल वीएम बनाना संभव है?
- 11. सार्वजनिक निजी या सुरक्षित घोषित किए बिना चर क्या हैं?
- 12. तालिका घोषित किए बिना [टीएमपी टेबल] में कैसे चुनें?
- 13. एचएसक्यूएल बनाना कक्षा
- 14. इन्सेट ग्राफ बनाना संभव है?
- 15. गतिशील रूप से कक्षा बनाना
- 16. क्या बिट्ससेट का वेक्टर बनाना संभव है?
- 17. क्या खाली कक्षा घोषित करना बुरा है?
- 18. कक्षा वस्तु बनाम HashMap
- 19. स्मृति आवंटित किए बिना डी में स्ट्रिंग बनाना?
- 20. Win32, C++: फोकस चोरी किए बिना पॉपअप विंडो बनाना
- 21. कक्षा को अदृश्य बनाना
- 22. क्या दृढ़ता से टाइप किए गए web.config संदर्भ बनाना संभव है?
- 23. क्या __init__ को कॉल किए बिना कक्षा को तुरंत चालू करने का कोई तरीका है?
- 24. बनाना/पॉप्युलेट जावास्क्रिप्ट कस्टम वस्तु
- 25. .NET में असुरक्षित कोड का उपयोग किए बिना कुशल फिक्स्ड-साइज एरे संभव हैं?
- 26. कक्षा, वस्तु, संस्था: क्या अंतर है?
- 27. कक्षा को विरासत के बिना एक गैर-गतिशील एक्शनस्क्रिप्ट 3 कक्षा में व्यवहार जोड़ना संभव है?
- 28. पहले एक चर घोषित किए बिना संदर्भ किए जा सकते हैं?
- 29. प्रारंभिक मूल्य के बिना चर को घोषित करना क्यों संभव है?
- 30. कन्स्ट्रक्टर को कॉल किए बिना कक्षा को बेकार कैसे करें?
आप भी एक खाली नक्शा बनाने के लिए इस वाक्य विन्यास का उपयोग कर सकते हैं: डीईएफ़ obj = [:] – Hudson
दिलचस्प। यदि आप किसी को आश्चर्यचकित करेंगे - इसे 'LinkedHashMap' के अंदर सरणी/सूचियों का उपयोग करने की अनुमति है। जैसे यह काम करता है: 'def obj = [a: [1,2, "foo"]]; obj.a.push ("बार") ' – Nux