闭包函数
闭包函数概述 闭包函数:返回函数的函数 闭包的好处:【内层函数的状态】被保存在闭包中 不使用闭包,就要开
辟多个全局变量来保存函数以外的数据 如果说这个函数被多方调用,大家都需要各保存各的数据,那么此时就需要开辟多个全局变量 具体使用哪个全局变量,还要在函数内做判断——增大了重复的代码量,令代码看起来比较垃圾
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| package main
import "fmt"
var likuiProgress int var wusongProgress int func Study(name string,hours int) { fmt.Printf("%s学习了%d小时\n",name,hours) if name=="李逵"{ likuiProgress += hours }else if name=="武松"{ wusongProgress += hours } } func main081() { Study("李逵", 5) fmt.Printf("李逵的学习进度是%d/10000\n",likuiProgress)
Study("武松", 15) fmt.Printf("李逵的学习进度是%d/10000\n",wusongProgress) }
func GetStudyFunc(name string) func(hours int) (progress int) {
var progress int
studyFunc := func(hours int) int { fmt.Printf("%s学习了%d小时\n",name,hours)
progress += hours return progress } fmt.Printf("study的类型是%T\n", studyFunc)
return studyFunc }
func main() {
studyFunc1 := GetStudyFunc("李逵") studyFunc2 := GetStudyFunc("武松") studyFunc3 := GetStudyFunc("鲁智深")
lkProgress := studyFunc1(5) lzsProgress := studyFunc3(17) wsProgress := studyFunc2(15) lkProgress = studyFunc1(3) lzsProgress = studyFunc3(12) lkProgress = studyFunc1(2) wsProgress = studyFunc2(13)
fmt.Printf("李逵的学习进度是%d/10000\n",lkProgress) fmt.Printf("武松的学习进度是%d/10000\n",wsProgress) fmt.Printf("鲁智深的学习进度是%d/10000\n",lzsProgress) }
|