Go有lambda表达式或类似的东西吗?
Go支持lambda表达式还是类似的东西?
我想从另一种使用lambda表达式(Ruby)的语言中移植一个库。
这里是一个例子,仔细复制和粘贴:
package main
import fmt "fmt"
type Stringy func() string
func foo() string{
return "Stringy function"
}
func takesAFunction(foo Stringy){
fmt.Printf("takesAFunction: %vn", foo())
}
func returnsAFunction()Stringy{
return func()string{
fmt.Printf("Inner stringy functionn");
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 stringyn"
};
fmt.Printf(baz());
}
Lambda表达式也称为函数文字。 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的主体中匿名定义。 返回的函数关闭变量i以形成闭包 。
Output
$ go run closures.go
1
2
3
1
链接地址: http://www.djcxy.com/p/51281.html