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

上一篇: Does Go have lambda expressions or anything similar?

下一篇: Are Lambda expressions in C# closures?