Go有lambdaexpression式还是类似的?

Go是否支持lambdaexpression式或类似的东西?

我想从另一种使用lambdaexpression式(Ruby)的语言中移植一个库。

这里是一个例子 ,仔细复制和粘贴:

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()); } 

Lambdaexpression式也被称为函数文字。 Go完全支持他们。

请参阅语言规范: http : //golang.org/ref/spec#Function_literals

请参阅代码步骤,附带示例和说明: http : //golang.org/doc/codewalk/functions/

在计算机编程中, 匿名函数或lambda抽象 (函数文本)是一个函数定义,不绑定到标识符, Go支持可以形成闭包的匿名函数 。 当你想定义一个内联函数而不必命名它时,匿名函数是很有用的。

  package main import "fmt" func intSeq() func() int { i := 0 return func() int { i += 1 return i } } func main() { nextInt := intSeq() fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) newInts := intSeq() fmt.Println(newInts()) } 

函数intSeq返回另一个函数,我们在intSeq的主体中匿名定义。 返回的函数closuresvariablesi来形成闭包

 Output $ go run closures.go 1 2 3 1