00:00
来吧,各位同学,我们现在呢,再给大家讲一下B包。B包这个概念呢,听起来会相对高大上一点,有时候也不是那么容易理解,对不对?但是呢,我们在做开发的时候,往往还会用到B包。那么我们来看看B包是个什么玩意儿,首先看它的基本介绍。所谓B包就是一个函数,注意听,它是一个函数,与与什么呢?其相关的引用环境。组成的一个整体,或者说叫一个实体。这里面出现了三个概念。一个首先是函数。也就是说B包它本质其实返回的是个函数,但是这个函数呢,它会用到函数外的一些变量。然后他们共同组成一个整体,这个整体我们把它叫B包。理解了吗?啊,大家不理解,待会儿我会举例,这有一个案例,大家看到这有一个案例呢,我这讲了一个这个东西看爱的upper,这是个累加器,大家看到在这里我们让这个累加器不停的调用,会返回这个相应的值,那这会我就不多说,我们直接走案例,走案例运行过后呢,再给大家把这个案例分析一下,好吧,来,我们先来说一下这个B包的基本介绍。
01:22
打开我们的这个笔记。B包。好的B包。OK。然后呢,我们给他一个标题二。我们给他一个标题二介绍。第一个是关于B包的基本介绍。对吧,基本介绍,然后呢,我们再来一个案例演示。就是我们的标题三。大家注意观察到啊,B包是一个函数,首先它是一个函数,然后呢,与其相引用的环境,它会引用到环境,其实说白了就是引用到一些变量,它会引用到一些变量组成的一个整体。
02:11
我们管这个整体叫B包,能理解好,现在呢,我们走一段代码,按这个代码给大家来做一个解释,打开我们的这个。文档,我们新建一个文件夹叫fun,然后呢DEMO07奖币包。然后呢,我们新建一个文件叫main。Go。好,我还是把这块粘过来为我所用对不对。方主函数。那写一个累加器。我们写个累加器没问题吧?好,现在累加器的使用呢?我先在这写一个函数,叫ADD upper。
03:00
然后这里面呢,我会让他返回一个这样的类型。函数,这个函数呢,会传一个int值进来,然后返回一个int。大家看它返回的是什么,返回的是一个函数,这里边呢,我先定义了一个变量叫n inch,初始化为十。对不对,然后我return了一个匿名函数,这匿名函数这样写的fun。X inch inch。然后呢,Return什么呀,N,我这样做的是等于N等于N加一,因为前面这个N呢,咱们是不是已经有了,我在这用的N给它加了个一,加了一个一,加了一个一,过后呢,我们加个X吧。直接加X,然后return谁呢?Return的这个值就是N这个值。大家看到没有return n这个值,那么我们来先用一下啊,我们先用一下大家这个时候大家可能还看不太懂,这是什么意思,对吧,还看不懂,看不太懂,那么我们待会再来解析,这个就叫李佳琪。
04:12
我们待会呢,待会再来分析它的东西,先看效果,我们来调用一下。我们来使用一下啊,使用前面的这个代码。那怎么来用呢?比方说我这里有一个变量来接收了。这个东西,比如说我在这里接受了爱的up。OK,调用它up,它返回的是什么呀,是不是实际上本质就是一个。函数啊好,那这时候我就可以调用它了,大家看。我print f1,我们先看这个时候返回什么,大家可以猜一猜返回什么内容,也就是说我在这个地方传了一个一,因为它返回的是这个函数吗?那就会把这个一传给谁,传给X,但是这个X呢,它在里面用的时候,它其实会跟外面这个N相加,所以说相当于是十加一等于N,那返回是多少?
05:09
是不是就是返回一个11啊,我们来运运算一下CD点点二对吧,CD到function我们的M6。呃,大七了,大7CD。点点function单七,然后呢,Go wrong,我们的命点go。跑起来,请看效果。11没问题,但是我要问的是这个是十,11没有问题,我要问的是假设我写一个二,这个地方返回什么,大家可以猜一猜。大家猜一下,这是关键,这个输了一个二,按理说如果按照我们以前的写法。你这写了个二,这是十,那就十加二等于12,但是不是。但是不是为什么说这样说呢?因为你这个它形成一个必报购这个N,这个N其实就已经变成11了,所以说这个地方会返回11 20 13,因为它相当于说这个N已经变成11了,11再加一个二不是13吗?
06:12
好,我们再来运行一下。这个时候我们会看到返回一个13。看到没有,所以说在这一块呢,同学们就有点不太理解了,为什么这样子,我们可以再试一下,比如说我在这写个三,你们觉得是多少。是不是相当于是这个13再加三等于16了。这个应该等于16。跑起来。是不是16完全正确,那为什么会出现这么一个情况呢?同学们注意听,我给大家整理一下这里面的几个点,整理到这里啊,同学们注意听。我先把这段代码呢给同学们放到笔记里面来,然后我要对这个代码进行一个代码的说明,注意听这块很重要。对上面代码的一个说明。对上面代码的说明和总结,这个很重要了,注意听讲。
07:04
那哪些地方是需要大家注意的呢?第一点。第一点,我先说第一点。第一。从这里面可以看到ADD upper,它是一个函数,它返回的一个数据类型是funit,这个啊,第一个我们总体是ADD upper。ADD upper,注意听讲,Upper是一个函数,它返回的数据类型是什么呢?Fun。Inch inch,没问题吧,这是第一个,那么我们注意看这个地方很关键,什么叫B包?到底哪一块是B包?这块很重要,到底哪一块是B包呢?注意看这里。注意看这地方。必包的说明来了。B包。必包。B包的说明我们看一下。
08:00
Body代码,我这好好的整理一下啊。B包的说明。是这样子的,同学们看这段代码,VRNT等于十这段代码。主要是要对他说做一个严肃的,这这一块很重要。大家看这里其实准确的讲啊,同学们准确的准确的讲这个就是B包。这个就是B包,就这一块代码形成一个B包,大家看说明它返回的返回的是一个函数。是一个函数,哪个函数就是一个匿名函数。返回的是匿名函数,但是大家看到,但是。注意听,但是这个匿名函数引用到了,引用到函数外的,函数外的什么东西,是不是函数外的这个N呢?函数外的N,因此,因此这个函数这个匿名函数。
09:02
匿名函数就和,就和谁呢?就和这个NN形成一个引用关系,他们共同引用就是这个匿名函数和N就组成,就形成一个整体。形成一个影整体。整体构成了。构成什么必包。B包。哎,所以说B包其实是相当于说是这个function,这个匿名函数,以及这个命命名函数和外面引用的这个N。构成的一个必包开,我这写的很清楚,返回的是匿名函数,但是匿名函数呢,它引用到函数外的N,因此匿名函数就和N形成一个整体,构成必包能理解好,这是第二个需要注意的,你可以这样理解啊,同学们可以这样理解大家大家。但大家啊,大家可以可以这样这样理解,怎么理解呢?你可以把这个函数返回,这个函数返回的,你可以把这个,把这个函数理解成一个类啊,把这个函数。
10:13
这样理解吧,你可以这样理解啊,就是说你可以这样理解是B包。B包。是是一个类。注意听是一个类,这个类的概念呢,就其实呃,所以说有些同学没有学过类就有点麻烦了,因为你没学过面向对象就有点麻烦了,你就先这样听着吧,有是一个类,而这个函数是什么呢?是操作,而我们这个N是什么呢?是字段。这样理解。那也就是说这个函数,它它这个实际上是一个操作,而这个N呢,相当于是他是是他的一个字段。是到一个字段,这个函数和这个N共同构成的一个B包,就是函数和它引用到的或者它使用到的这个N构成B包。
11:01
啊,构成一个B包,理解好,那么我们在这里,大家看到我们在这儿不停的调用这个函数,就是它把这个返回去,这个F不就是。不就是这个B包了吗?所以说这样子啊,就说当当我们反复。反复。反复的调用,调用什么呢?F。就是我们这儿不是不停的在调用这个F吗?这样调用F函数时。函数式。啊,因为因为什么呢?因为这个N它是累加的,这个N它是不会,它不会每次进来就会给你定义一次,它不会。啊,他不会,但是他只是初始化一次这个N。N是初始化一次。初始化一次,因此,因此每调用一次,每调用一次就进行累积,就进行了累加。
12:06
累加,因此这个结果你们可以看到第一次是11,但是当他进行调用完那个11过后,其实他下次掉的时候,这个N就变成11了,而不会再进行一次初始化,能理解吗?诶,就说这个函数就跟这个N形成一个B包,它们是一个整体。好,每调用一次就进行累积,而不会重新初始化D,这是我们所说的这个第一点,第二点,第三点,第四点,最后一点,注意听我们,我们要搞清楚,搞清。搞清楚这个B包。B包的关键。背包的关键就是就是要分析清楚,就是要分析出,分析出函数。函数返回的函数,这样说吧,返回的这个函数,它使用到了或者他引用到了都可以啊,使用或者引用引用到哪些变量。
13:03
哪些变量?为什么要把这个分析清楚呢?因为你分析清楚之后才知道函数和哪些变量构成了B包啊,因为函数和它引用到的引用到的变量共同。共同构成必包。构成必报。OK,就是老师分析的这么五点,大家看理解了没有,说白了,再说的再直白一点就是这个,如果同学们学过面向对象,就特别好理解了。如果你没有学过面向对象呢,也很好理解,你就这样理解,你就认为什么呢?你就认为它返必包,必包本质就是函数,返回的这个函数和它引用的类型构成一个整体。构成一个整体,当它反复调用的时候,它引用到的这个变量不会每次都初始化,而是不停的累加。就这样理解就完事了,再说一遍,你以后要理解B包,就理解什么呢?第一个B包其实是返回的这个这个匿名函数和它这个函数,返回的这个匿名函数和这个匿名函数用到的这个外部的函数外的一个变量,它们共同构构成一个必包,而在调用的时候呢,他用到的这些环境变量不是每一次都会被初始化,他用一次他就会变化,再用一次,他在这个基础上再进行变化,OK,就这两点。
14:27
最关键的两点,理解了就OK明白。好,这就是老师对大家说的这个B包的基本介绍,大家看理解了没有,大家看理解了没有?如果说大家真的明白明白了,我稍微改变一下,大家看看看能不能马上把这个股搞出来,比如说。VAR,我再写一个s string string,我给他初始化一个叫hello。Hello,能能理解吧,Hello,这是一个,哈哈,那这是一个hello的话呢,我问大家一个问题,假设我在这里。
15:05
哦,我在这个地方。做一个是最。做一个string,我在这用这外面这个string呢,啊,等于我给他怎么做呢,我想这样子啊就是。来一个这样的。等号等号,然后呢,我是正。再拼接一个什么,每次我给他加一个。X或者这样写啊,是正注意听大家看能不能理解了,看你们能理解吗,然后。我在这儿。输出一句话啊,等一下啊,这个地方这样变化还不行,是个X才对。因为我们这没有I对不对点。Print e。这样我们输出十寸等于十寸。大家看看能不能理解这个东西。
16:00
我问大家。我我问同学们啊,当我们第一次调用的时候,这边肯定会输入11,那我问同学们第一次调用的时候,这个寸拼接上自己再加一个X,这这个地方会输出什么。第一次会输出什么?第一次调用的时候,就是我F1调用这个B包的时候,或者调用这个这个这个B包的时候,这个地方会输出什么,是不是十寸。它会等于原先的哈。Hello,再加上你把这个X不是变变了吗?第一次你穿的是再做HELLO1。那第二次会输出什么呢?同学们,第二次是不是在这个基础上,是不是在这个,因为因为刚才老师讲过了吗?它它引用到外面这个,这个变量只会初始化一次,因此它在调F2的时候,它其实是在这个时钟这个的基础上再去拼接的一个,因此呢,第二次输出的是什么,大家知道吗?是不是就是在这个基础上。
17:00
加了一个二啊。哦不不,还不是这样简单的啊,它是因为它这个拼接,哦对对对,是这样子的,拼接过后再加了一个二,没错,第三次输出的时候是什么?同学们是不是就是在后面又加了一个三。是这样子的吧,因为。道理是一样的吗?刚才老师讲过好多遍了,就是返回的这个函数和外面引用的变量共共同构成一个B包,第二个呢,当你每次调用这个B包的时候,其实这个变量不会再初始化了,而是在原先的基础上进行这个变化。OK,因为他们是个整体。因为你可以把它理解成一个一个类,或者理解成一个对象都可以。好,同学们,我们来看看老师分析的结果是不是这样子的跑起来。走我们看运行的效果。哦,同学们看啊,这地方老师还有点小问题是。20寸拼接,我们看这地方是怎么理解啊,怎么理解看一下。
18:00
好呃,同学们,刚刚才看到看到老师这方是不是这个加写这方写多了一份啊,写多了一份,那你那你这样子的话,就就跟这个结果确实是是这个意思了,对吧?确实这个意思,因为因为我我这个是把这个X换成这个东西呢,换成一了,换成一,那这一块地方我们还要稍微的变化一下,把它变化一下,也就是说如果要出这种这种效果的话呢,其实这个地方就不需要再让他自己再来一次了,因为你再来一次是在这个基础上反复的累积嘛,对不对,反复累积,那你这个肯定出来效果就就完全跟我们想的不太一样了,对吧,想的不太一样了,好,我们再来跑一下。再跑一下就可以了,好再执行一下看效果。没有那个啊走我们看这一次呢,应该就正确了,你看是这这个地方为什么会出现这个字符啊,同学们是不是因为我这个地方是个整数啊,整数这个一,它会把它转成阿科玛的一个字符,是不是转成阿斯克玛的一个字符,所以说这个地方,这地方它就不是这是这不是一了,而是而是转成这个一对应的阿斯柯玛。
19:07
阿斯克马,这个对应的字符一对应的字符是什么?就是个笑脸,那我这写死了,你们再看一遍就好办了,比如说我这直接写成什么呢?比如说我们写成这样一个东西,直接写死吧。直接写死好吧,写成一个这样的东西,比如说。A,我这样拼接大家可能看的就明白了,我不,我就不用这个X了,那就第一次是A,第二次是什么?AA,第三次是什么?AAA能理解吧,因为当时为什么会出现这个这个笑脸呢?这个笑脸笑脸这个是为什么呀?打开我们的阿斯柯玛,大家看我在以前是不是讲过这个东西是试卷里面有一个阿斯柯玛对照值。因为因为刚才我们是转的时候,其实是把这个一转过来了,这个。
20:01
他转成一个,转成一个这个。转成一个它不可显示啊,大家看这显示不出来,显示不出来,所以说就看不出来,我我还是说。我还是这样子给大家执行一下。保存一下,大家看,跑起来。走。看效果是不是aaaaaa,如果一定要让大家理解成这个数字的话,我可以找一个能够转成对应字符的,这样更明白了,大家看我还是找这个S码,我们找一个能够可显示的字符吧,好不好?找一个可显示的字符,哪一个呢?比如说这个吧。这个。这个这个这个Dollar符,这个Dollar符对应的是36对不对,36如果要一定要像那样写的话也可以,那就这样子的十寸36这个因因为刚才老师已经讲过了这个36。就是36对应的这个字符是什么呢?它对应的字符其实就是一个Dollar,是不是就是Dollar好,这个就是可见字符,刚才那个他是不不可见字符,所以说那个就就看的比较乱了,那这样子的话就应该是第一个变成Dollar。
21:14
后面呢,就变成Dollar Dollar。第三个变成三个到,因为它每次都累加一次,是不是好,我们再来跑一遍,看效果跑起来。跑起来,诶你看这样分析就正确的。对吧,没问题,刚才老师呢,就是呃,这方这样写了,那就太恐怖了,这样子的话就是相当于把十寸本身再加上十寸再加这个,那得加肯定就就完全不一样了,对不对,对不对,好,这样子呢,就把它撤回去好,如果这样理解了,同学们,那你对字符就是我们B包理解会更清晰一点,更清晰一点,好的同学们,那关于这个B包呢的一个案例,就B包的。这个案例我们就给大家讲到这里,好吧,就讲到这里,同样我们这做了一个修改的案例,给他拿过来。
22:07
对上面代码的一个修改。修改加深。加深对壁包的臂包。必包的理解,OK,好,老师,把这段代码给同学们拿过来哈,拿过来。拿过来,包括这边分析,我们都在这写清楚了。好的,来吧。把这段代码呢,拿到我们的笔记里边去。加深一个认识。保存好。到哪里去,放到这O了。没问题吧?好,同学们,那关于B包的一个基本介绍呢,我们就先介绍到这里,下面呢,还有B包的一些细节,我们在下一个视频为大家进行讲解。
我来说两句