2015-01-31 21 views
6

Go supporta la funzione nidificata all'interno della funzione ma nessuna funzione nidificata tranne lambda, significa che non esiste un modo per definire una classe nidificata all'interno della funzione?Classe interna classe Golang

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

Quindi sembra un po 'strano che la classe si indebolisca all'interno della funzione.

Eventuali suggerimenti?

+3

'struct' è un tipo di struttura. Go non ha classi. – icza

+0

@ scusa scusa la 'classe' sopra significa' struct' con funzione di limitazione. Perdona la mia espressione sbagliata. –

+0

Sì, ho capito, ho appena corretto il termine o la terminologia. – icza

risposta

7

In realtà non importa se si vuole dichiarare la funzione con o senza un ricevitore: funzioni di nidificazione in Go non sono ammessi.

Sebbene sia possibile utilizzare Function literals per realizzare qualcosa di simile:

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

    foo("Hello World!") 
} 

Qui abbiamo creato una variabile foo che ha un tipo di funzione ed è delcared all'interno di un'altra funzione f. Chiamando la funzione "esterno" f uscite: "Hello World!" come previsto.

Provalo su Go Playground.

+0

ok ~ e c'è un modo per associare una funzione letterale alla 'struct' nidificata? –

+0

@HayesPan No, non puoi. Non nel senso di creare un metodo per il tipo. Si potrebbe specificare un parametro addizionale alla funzione letterale che sarebbe del tipo 'struct' come il ricevitore, ma non farà parte del set di metodi' struct'. Un _Function literal_ non è un _function_, è solo un _value_ (che ha un tipo di funzione). – icza

+0

capito! Grazie! @icza –

Problemi correlati