2017-02-27 3 views
0

Für den folgenden Code zurück:Go: ist es möglich, Zeiger auf eine Funktion

package main 

import "fmt" 

type intFunc func(int) int 

var t = func() intFunc { 
     a := func(b int) int { return b} 
     return a 
    } 

func main() { 
    fmt.Println(t()(2)) 
    } 

Gibt es einen Weg, um den Zeiger auf die Funktion anstelle der Funktion direkt zurück? (etwas wie return &a)? hier

ist der Spielplatz: https://play.golang.org/p/IobCtRjVVX

+0

Ja, aber warum sollten Sie/wollen? Funktionen sind erste Klasse, obwohl ich die Assembly überprüfen sollte, verhalten sie sich wahrscheinlich eher wie Referenztypen als Daten. –

+0

@EliasVanOotegem: Vielleicht möchten Sie in der Lage sein, einen Funktionszeiger als zu setzendes Argument zu übergeben. Es ist eine ähnliche Situation wie wenn Sie einen Zeiger auf einen Zeiger benötigen. – JimB

+0

@ JimB: Fair genug: Setzen Sie einen Wert auf ein Zeigerargument. Aber Go hat mehrere Rückgabewerte, ich setze kaum Werte auf Argumente, weil ich nur 2 oder 3 Werte zurückgeben kann, wenn ich wirklich will/muss. Und das OP fragt speziell nach _returning_ einen Zeiger auf eine Funktion –

Antwort

2

Ja, solange Sie die Typen korrekt konvertieren:

https://play.golang.org/p/3R5pPqr_nW

type intFunc func(int) int 

var t = func() *intFunc { 
    a := intFunc(func(b int) int { return b }) 
    return &a 
} 

func main() { 
    fmt.Println((*t())(2)) 
} 

Und ohne die genannten Art:

https://play.golang.org/p/-5fiMBa7e_

var t = func() *func(int) int { 
    a := func(b int) int { return b } 
    return &a 
} 

func main() { 
    fmt.Println((*t())(2)) 
} 
Verwandte Themen