2015-01-31 21 views
6

Go obsługuje zagnieżdżoną konstrukcję wewnątrz struktury, ale bez funkcji zagnieżdżonej z wyjątkiem lambda, czy to znaczy, że nie ma możliwości zdefiniowania funkcji zagnieżdżonej wewnątrz funkcji?Funkcja klasy zagnieżdżonej Golang wewnątrz funkcji

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

W związku z tym wydaje się nieco dziwne, że klasa słabnie w funkcji.

Jakieś wskazówki?

+3

'struct' jest typem struktury. Go nie ma klas. – icza

+0

@icza Przepraszam, że 'class' powyżej oznacza' struct' z funkcją graniczną. Wybacz moje niepoprawne wyrażenie. –

+0

Tak, zrozumiałem, właśnie poprawiłem termin lub terminologię. – icza

Odpowiedz

7

Właściwie to nie ma znaczenia, jeśli chcesz, aby zadeklarować funkcję z lub bez odbiornik: gniazdowania funkcje w Go nie są dozwolone.

Chociaż można użyć Function literals osiągnąć coś takiego:

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

    foo("Hello World!") 
} 

Tutaj stworzyliśmy zmienną foo który ma typ funkcji i jest delcared wewnątrz innej funkcji f. Wywołanie "zewnętrznej" funkcji f wyjściowych: "Hello World!" zgodnie z oczekiwaniami.

Wypróbuj na Go Playground.

+0

ok ~ i czy istnieje sposób na przywiązanie literału Function do zagnieżdżonej 'struct'? –

+0

@HayesPan Nie, nie możesz. Nie w sensie tworzenia metody dla typu. Można podać dodatkowy parametr do literału funkcji, który byłby typu 'struct', jak odbiornik, ale nie będzie częścią zestawu metod' struct''s. A _Funkcja literał_ nie jest _funkcja_, jest po prostu wartością_ (która ma typ funkcji). – icza

+0

rozumiem √ Dzięki! @icza –

Powiązane problemy