2012-08-01 7 views

Antwort

38

Here is an example, kopiert und eingefügt sorgfältig:

package main 

import fmt "fmt" 

type Stringy func() string 

func foo() string{ 
    return "Stringy function" 
} 

func takesAFunction(foo Stringy){ 
    fmt.Printf("takesAFunction: %v\n", foo()) 
} 

func returnsAFunction()Stringy{ 
    return func()string{ 
    fmt.Printf("Inner stringy function\n"); 
    return "bar" // have to return a string to be stringy 
    } 
} 

func main(){ 
    takesAFunction(foo); 
    var f Stringy = returnsAFunction(); 
    f(); 
    var baz Stringy = func()string{ 
    return "anonymous stringy\n" 
    }; 
    fmt.Printf(baz()); 
} 
+5

warum hast du das gesagt? kopiert und sorgfältig eingefügt? :) – loyalflow

+0

weil ich den Code kopiert habe, und wollte es klar machen :) – perreal

+10

Ich würde gerne mehr auf Ihre Frage als kopierten Code sehen. Zuallererst könntest du ein "Ja"/"Nein"/"teilweise" etc. hinzufügen. Dann ein bisschen Beschreibung, was dein Code eigentlich macht. – Kissaki

1

Ja

In Computer-Programmierung, eine anonyme Funktion oder Lambda Abstraktion (func (literal) ist eine Funktionsdefinition, die nicht an einen Bezeichner gebunden ist, und Go unterstützt anonyme Funktionen, die Closures bilden können. Anonyme Funktionen sind nützlich, wenn Sie eine Funktion inline definieren möchten, ohne sie benennen zu müssen.

Die Funktion intSeq gibt eine andere Funktion zurück, die wir anonym im Rumpf von intSeq definieren. Die zurückgegebene -Funktion wird über die Variable i geschlossen, um einen Abschluss zu bilden.

Output 
$ go run closures.go 
1 
2 
3 
1 
Verwandte Themen