2015-01-31 10 views
6

गो फ़ंक्शन के अंदर नेस्टेड स्ट्रक्चर का समर्थन करता है लेकिन लैम्ब्डा को छोड़कर कोई नेस्टेड फ़ंक्शन नहीं है, इसका मतलब यह है कि फ़ंक्शन के अंदर नेस्टेड क्लास को परिभाषित करने का कोई तरीका नहीं है?गोलांग नेस्टेड क्लास फंक्शन के अंदर

func f() { 
    // nested struct Cls inside f 
    type Cls struct { 
    ... 
    } 
    // try bounding foo to Cls but fail 
    func (c *Cls) foo() { 
    ... 
    } 
} 

इस प्रकार यह थोड़ा अजीब लगता है कि वर्ग के अंदर वर्ग कमजोर है।

कोई संकेत?

+3

'struct' एक संरचना प्रकार है। जाओ कक्षाएं नहीं है। – icza

+0

@icza क्षमा करें 'वर्ग' उपरोक्त मतलब 'संरचना' बाध्यकारी समारोह के साथ है। मेरी गलत अभिव्यक्ति क्षमा करें। –

+0

हां, मुझे समझ में आया, मैंने अभी शब्द या शब्दावली को सही किया है। – icza

उत्तर

7

वास्तव में यह कोई फर्क नहीं पड़ता अगर आप बिना एक रिसीवर या साथ समारोह घोषित करने के लिए करना चाहते हैं: जाओ में घोंसले कार्यों की अनुमति नहीं है।

आप Function literals का उपयोग कुछ इस तरह प्राप्त करने के लिए कर सकते हैं:

func f() { 
    foo := func(s string) { 
     fmt.Println(s) 
    } 

    foo("Hello World!") 
} 

यहाँ हम एक चर foo जो एक समारोह प्रकार है बनाया है और यह एक और समारोह f अंदर delcared है। "बाहरी" फ़ंक्शन को कॉल करना f आउटपुट: "Hello World!" अपेक्षित के रूप में।

इसे Go Playground पर आज़माएं।

+0

ठीक ~ और क्या नेस्टेड 'स्ट्रक्चर' के लिए एक अक्षर अक्षर को बाध्य करने का कोई तरीका है? –

+0

@HayesPan नहीं, आप नहीं कर सकते। प्रकार के लिए एक विधि बनाने की भावना में नहीं। आप फंक्शन शाब्दिक में एक अतिरिक्त पैरामीटर निर्दिष्ट कर सकते हैं जो रिसीवर की तरह 'स्ट्रक्चर' प्रकार का होगा, लेकिन यह 'स्ट्रक्चर' विधि सेट का हिस्सा नहीं होगा। एक _ फ़ंक्शन literal_ _function_ नहीं है, यह केवल _value_ है (जिसमें फ़ंक्शन प्रकार है)। – icza

+0

इसे मिला धन्यवाद! @icza –

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