2015-01-31 51 views
6

Git, iç işlevli iç yapısını destekler, ancak lambda dışında iç içe geçmiş işlevi desteklemez, iç içe geçmiş bir sınıf içinde işlev tanımlamanın bir yolu olmadığı anlamına mı gelir?Golang iç içe geçmiş işlevi iç sınıf

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

Böylece sınıfın işlev içinde zayıflaması biraz garip geliyor.

Herhangi bir ipucu? Git yuvalama fonksiyonları izin verilmez: Eğer olmadan bir alıcı veya ile işlevini bildirmek istiyorsanız

+3

'struct' bir yapı türüdür. Go dersleri yok. – icza

+0

@icza Üzgünüz, 'class', sınırlama işleviyle 'struct' anlamına gelir. Yanlış ifademi bağışla. –

+0

Evet, anladım, terimi veya terminolojiyi düzelttim. – icza

cevap

7

Aslında hiç önemli değil.

böyle bir şey elde etmek Function literals kullanabilirsiniz, ancak:

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

    foo("Hello World!") 
} 

Burada bir işlev türü olan bir değişken foo oluşturulan ve başka bir fonksiyonu f içine delcared edilir. "Dış" işlevinin çağrılması f çıktıları: "Hello World!" beklendiği gibi.

Go Playground numaralı telefonu deneyin.

+0

tamam ~ ve bir işlev değişmezini iç içe geçmiş yapıya bağlamanın bir yolu var mı? –

+0

@HayesPan Hayır, yapamazsınız. Tür için bir yöntem oluşturma anlamında değil. Alıcı gibi "struct" türünde olan işlev değişkeni için ek bir parametre belirtebilirsiniz, ancak struct'in metod setinin bir parçası olmayacaktır. Bir _Function literal_ _function_ değil, sadece bir _value_ (bir işlev türü vardır). – icza

+0

Anladım! Teşekkürler! @icza –

İlgili konular