per*_*eal 60
这是一个例子,仔细复制和粘贴:
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());
}
Run Code Online (Sandbox Code Playgroud)
小智 35
Lambda表达式也称为函数文字.Go完全支持它们.
请参阅语言规范:http: //golang.org/ref/spec#Function_literals
查看代码行走,以及示例和说明:http: //golang.org/doc/codewalk/functions/
din*_*pal 14
是
在计算机编程中,匿名函数或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())
}
Run Code Online (Sandbox Code Playgroud)
function intSeq返回另一个函数,我们在intSeq的主体中匿名定义.该返回的函数在变量i关闭以形成一个闭合.
Output
$ go run closures.go
1
2
3
1
Run Code Online (Sandbox Code Playgroud)
小智 7
golang 好像没有做 lambda 表达式,但是你可以用一个字面量匿名函数,我在学习比较 JS 中的等价物的时候写了一些例子,希望对你有帮助!!
func() string {
return "some String Value"
}
//Js similar: () => 'some String Value'
Run Code Online (Sandbox Code Playgroud)
func(arg string) string {
return "some String" + arg
}
//Js similar: (arg) => "some String Value" + arg
Run Code Online (Sandbox Code Playgroud)
func() {
fmt.Println("Some String Value")
}
//Js similar: () => {console.log("Some String Value")}
Run Code Online (Sandbox Code Playgroud)
func(arg string) {
fmt.Println("Some String " + arg)
}
//Js: (arg) => {console.log("Some String Value" + arg)}
Run Code Online (Sandbox Code Playgroud)