zoukankan      html  css  js  c++  java
  • Golang-闭包

    Golang-闭包

      介绍
        基本介绍:闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)
      案例演示:

        

        对上面代码的说明和总结
        1)AddUpper 是一个函数,返回的数据类型是 fun (int) int
        2)闭包的说明

          

          返回的是一个匿名函数, 但是这个匿名函数引用到函数外的n ,因此这个匿名函数就和n 形成一个整体,构成闭包。

        3)大家可以这样理解: 闭包是类, 函数是操作,n 是字段。函数和它使用到 n 构成闭包。
        4)当我们反复的调用 f 函数时,因为 n 是初始化一次,因此每调用一次就进行累计。
        5)我们要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包。
        6)对上面代码的一个修改,加深对闭包的理解

          

       

    闭包的最佳实践
      请编写一个程序,具体要求如下
      1)编写一个函数 makeSuffix(suffix string) 可以接收一个文件后缀名(比如.jpg),并返回一个闭包
      2)调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如.jpg) ,则返回 文件名.jpg , 如果已经有.jpg 后缀,则返回原文件名。

      3)要求使用闭包的方式完成
      4)strings.HasSuffix , 该函数可以判断某个字符串是否有指定的后缀。

      代码:

         

         上面代码的总结和说明:

        1)返回的匿名函数和 makeSuffix (suffix string) 的 suffix 变量 组合成一个闭包,因为 返回的函数引用到 suffix 这个变量
        2)我们体会一下闭包的好处,如果使用传统的方法,也可以轻松实现这个功能,但是传统方法需要每次都传入 后缀名,比如 .jpg ,而闭包因为可以保留上次引用的某个值,所以我们传入一次就可以反复使用。大家可以仔细的体会一把!

      

  • 相关阅读:
    [Unity3D]脚本中Start()和Awake()的区别
    win7中资源管理器不能显示图片预览的解决方法
    Unity Built-in Shader详解三
    Unity Built-in Shader详解二
    php扩展安装
    ImportError: No module named mysql 报错python引用mysql报错
    运维制度
    ps aux|awk -F'[ ]+' '$3>90{print $2}'|xargs -n1 kill -9
    运维面试必知十五大原理知识点
    resize2fs
  • 原文地址:https://www.cnblogs.com/Essaycode/p/12642243.html
Copyright © 2011-2022 走看看