go闭包

package main

import "fmt"

func addn(n int) func(int) int {
    return func(m int) int {
        return  m + n
    }
}

func main() {
    //f := addn(10)(5)
    f := addn(10)
    fmt.Println(f(5))
}
这里的函数接受了一个int参数,返回了一个匿名函数。在调用addn时,返回了就是一个函数,需要再次传参调用执行。其结果为15

这里需要注意,在写闭包函数时,返回的匿名函数要跟外层的函数签名保持一致。而且里面的参数发现了没,里层函数的参数是可以调用外层的函数的参数的,有一种继承的意思。

利用闭包和匿名函数,创造生成器的函数
package main

import "fmt"

func iter(s []int) func() int {
    var i = 0
    return func() int {
        if i >= len(s) {
            return 0
        }
        n := s[i]
        i += 1
        return n
    }
}

func main() {
    f := iter([]int{1, 2, 3})
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())
}
package main

import (
    "fmt"
    "errors"
)

func iter(s []int) func() (int, error) {
    var i = 0
    return func() (int, error) {
        if i >= len(s) {
            return 0, errors.New("end")
        }
        n := s[i]
        i += 1
        return n, nil
    }
}

func main() {
    f := iter([]int{1, 2, 3})
    for  {
        n, err :=f()
        if err != nil{
            break
        }
        fmt.Println(n)
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 先说工厂模式,工厂模式有3种:简单工厂模式;工厂方法模式;抽象工厂模式。 go语言中的闭包已经在上一节golang...
    初级赛亚人阅读 6,057评论 1 1
  • 本章将会介绍 闭包表达式尾随闭包值捕获闭包是引用类型逃逸闭包自动闭包枚举语法使用Switch语句匹配枚举值关联值原...
    寒桥阅读 5,470评论 0 3
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    莽原奔马668阅读 5,869评论 2 12
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    穷人家的孩纸阅读 5,688评论 1 5
  • 一 平常说的话,做的事是一个人思想水平的外在表现,好的思想需要沉淀,进而指导一言一行。沉淀思想有一个办法就是反省,...
    我爱一碗香阅读 2,600评论 0 3

友情链接更多精彩内容