zoukankan      html  css  js  c++  java
  • go语言学习之闭包函数

    package main
    
    import (
        "fmt"
    )
    
    // 匿名函数1
    func intSeq() func() int{
         var arrInt = [10]int{1,2,3,4,5,6,7,8,9,10}
         i := -1
        return func() int{
            i += 1
            return arrInt[i]
        }
    }
    
    // 带参数匿名函数2
    func intSeq2() func(index int) int{
         var arrInt = [10]int{0,1,2,3,4,5,6,7,8,9}
         i := -1
        return func(index int) int{
            i += 1
            return arrInt[index]
        }
    }
    
     func testIntSeq(){
          nextInt := intSeq()
         fmt.Println(nextInt())
         fmt.Println(nextInt())
     }
     func testIntSeq2(){
          nextInt := intSeq2()
         fmt.Println(nextInt(2))
         fmt.Println(nextInt(5))
     }
     
     
    func testQuestion(){
        var j int = 5
        a := func() (func()){
            var i int = 10
            return func() {
                fmt.Println(i, j)
            }
        }
       
        b := a()
        b()
    }  
     
     func testQuestion2(){
          var j int = 5
         a := func() (func()){
              var i int = 10
              return func() {
                 fmt.Println(i, j)
              }
          }()
         a()
     }
    
     func Question3() []func() {
          b := make([]func(), 3, 3)
          for i := 0; i < 3; i++ {
              b[i] = func() {
                  fmt.Println(i)
              }
          }
           return b
     }  
       // 闭包通过引用的方式使用外部函数的变量。
      // 上例中只调用了一次函数B,构成一个闭包,i 在外部函数B中定义,所以闭包维护该变量 i ,c[0]、c[1]、c[2]中的 i 都是闭包中 i 的引用。
       // 因此执行c:=Question3()后,i 的值已经变为3,故再调用c[0]()时的输出是3而不是0。   
      func testQuestion3(){
      c := Question3()
      c[0]()
      c[1]()
      c[2]()
     }
      
     func Question4() []func() {
        b := make([]func(), 3, 3)
        for i := 0; i < 3; i++ {
            b[i] = (func(j int) func() {
                return func() {
                    fmt.Println(j)
                }
            })(i)
        }
        return b
    }
     // 通过嵌套匿名函数的方式解决了testQuestion3的问题
     func testQuestion4(){
      c := Question4()
      c[0]()
      c[1]()
      c[2]()
     } 
     func main(){
         // 测试1匿名函数1
         testIntSeq();
         // 测试2带参数匿名函数
         testIntSeq2();
         // 测试3
         testQuestion();
         // 测试4
         testQuestion2();
         
          // 测试5
         testQuestion3();
         // 测试6
         testQuestion4();
     
     }
    
     
  • 相关阅读:
    CSP 命令行选项(201403-3)
    ElasticSearch7.10的查询数据-简单查询
    ElasticSearch 种映射参数详解-理论学习02
    Elasticsearch7.10 -理论学习01
    ElasticSearch7.10索引
    ElasticSearch7.10的分词器
    ElasticSearch-7.10安装-2
    ElasticSearch第一天
    Idea的注释配置
    深圳第一站被骗消费3960元
  • 原文地址:https://www.cnblogs.com/xzlq/p/9951612.html
Copyright © 2011-2022 走看看