zoukankan      html  css  js  c++  java
  • Go语言的函数06---闭包函数

    package main
    
    import "fmt"
    /*
    李逵和武松的Study方法的逻辑是几乎一模一样的
    然而为了分别保存两人的学习进度,需要开辟两个全局变量,函数内部的需要使用两条分支结构才能完成业务逻辑
    如果是108将都来学习。。。
    此时代码的可复用性很差
    */
    var progress int
    func Study(name string, hours int) ( int) {
    	fmt.Printf("%s学习了%d小时",name,hours)
    	progress += hours
    	return hours
    }
    func main081() {
    	progress := Study("黑旋风",5)
    	fmt.Printf("李逵的学习进度%d/10000",progress)
    }
    
    /*
    使用闭包函数优化Study
    每个人有不同的学习进度,将这个进度保存在【各自的闭包】中
    */
    /*
    闭包函数:返回函数的函数
    闭包函数的好处:使用同一份内层函数的代码,创建出任意多个不同的函数对象,这些对象各自的状态都被保存在函数闭包(外层函数)中,各行其道,互不干扰
    */
    
    func GetStudy(name string) func(int) int{
    	var progress int
    	study := func(hours int) int {
    		fmt.Printf("%s学习了%d小时
    ", name ,hours)
    		progress += hours
    		return progress
    	}
    	return study
    }
    
    func main() {
    	studyFunc := GetStudy("李逵")
    	studyFunc(3)
    	studyFunc(5)
    	likuiProgress := studyFunc(2)
    	fmt.Printf("李逵的学习进度%d/10000
    ",likuiProgress)
    	studyFunc1 := GetStudy("宋江")
    	studyFunc1(9)
    	studyFunc1(8)
    	songjiangProgress1 := studyFunc1(5)
    	fmt.Printf("宋江的学习进度%d/10000
    ",songjiangProgress1)
    }
    

    输出:

    李逵学习了3小时
    李逵学习了5小时
    李逵学习了2小时
    李逵的学习进度10/10000
    宋江学习了9小时
    宋江学习了8小时
    宋江学习了5小时
    宋江的学习进度22/10000
    

      

  • 相关阅读:
    黑盒测试方法用例设计详解
    跨域
    HTTP Referer
    Java抽象类和接口
    深入理解Java垃圾回收机制
    Java异常处理机制
    hash
    JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
    get和post的区别
    Mac 文档阅读软件Dash软件破解版
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11796135.html
Copyright © 2011-2022 走看看