2012-02-16 10 views

उत्तर

56

ग्रोवी में आपको हमेशा एक वस्तु का वर्ग प्रदान करना होगा, इसलिए जावास्क्रिप्ट के ऑब्जेक्ट-शाब्दिक वाक्यविन्यास में ग्रोवी में कोई समकक्ष नहीं है।

हालांकि, ग्रोवी के पास Map के लिए एक शाब्दिक वाक्यविन्यास है, जो संकल्पनात्मक रूप से जावास्क्रिप्ट ऑब्जेक्ट के समान ही है, यानी दोनों गुणों या नाम-मूल्य जोड़े का संग्रह हैं।

ऊपर जावास्क्रिप्ट के बराबर ग्रूवी कोड है:

def obj = [a: '1'] 
println obj.a 

हालांकि कोई वर्ग यहां इस्तेमाल आप अभी भी एक विशेष वर्ग (java.util.LinkedHashMap) की एक वस्तु बना रहे हैं नाम नहीं है। उपरोक्त कोड सिर्फ के लिए आशुलिपि है:

def obj = new LinkedHashMap(); 
obj.a = '1' 
println obj.a 

Expando class शायद और भी अधिक JavaScript ऑब्जेक्ट के समान है, और उपयोगी है जब आप एक वर्ग को परिभाषित करने के "भूमि के ऊपर" से बचने के लिए, या करने के लिए एक गतिशील वस्तु चाहते हैं करना चाहते हैं जो रनटाइम पर किसी भी मनमानी संपत्ति को जोड़ा जा सकता है।

+0

आप भी एक खाली नक्शा बनाने के लिए इस वाक्य विन्यास का उपयोग कर सकते हैं: डीईएफ़ obj = [:] – Hudson

+0

दिलचस्प। यदि आप किसी को आश्चर्यचकित करेंगे - इसे 'LinkedHashMap' के अंदर सरणी/सूचियों का उपयोग करने की अनुमति है। जैसे यह काम करता है: 'def obj = [a: [1,2, "foo"]]; obj.a.push ("बार") ' – Nux

21

थोड़ा आश्चर्यचकित है कि किसी ने एक्सपोन्डो क्लास का उल्लेख नहीं किया है। यह एक मानचित्र पर अतिरिक्त कार्यक्षमता जोड़ता है जिसमें आप सीधे अपने कार्यों के भीतर गुणों का संदर्भ दे सकते हैं। नीचे कोड उदाहरण।

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://groovy.codehaus.org/api/groovy/util/Expando.html

+0

ग्रेट मिल! शानदार श्री हाकी ने एक्सपोन्डो क्लास के बारे में भी लिखा है: http://mrhaki.blogspot.com/2009/10/groovy-goodness-expando-as-dynamic-bean.html मैं कहूंगा कि एक्सपोन्डो क्लास वास्तव में है क्या पूछा जा रहा था इसका जवाब। – Henrik

संबंधित मुद्दे