00:00
各位,我们接着来再来看一下类型断言的第二个最佳时间案例。那么这个时候呢?我们要求同学们完成这样一个功能,请大家编写一个函数循环的判断传入参数的类型。这个呢,在我们一些项目里边可能会用到。可能会用到,也就是说现在呢,我给你一个,我需要有这么一个功能,就说我给你传入一个参数。你就告诉我这个参数的类型是什么就可以了。就说这个参数类型到底是什么,事先我有可能是不知道的。只有通过你这个函数来判断这个传入的时差到底是什么类型,大家看这段代码。大家看这段代码,它这样子的。我这里可以写个函数叫type价值。那么我这里用到了一个这样的方法,大家想这是什么东西啊?还记不记得这是什么写法?我们在讲函数时给大家讲过,这种参数叫做可变,就说可变参数对不对,还记得吧,就说这个参数的类型呢,通过三三,呃,参数的个数,我们通过点点点三个点就可以表示我这个type价值可以接收任意多个。
01:19
13。记得吧,然后呢,这个类型又是空类型,那就说我这个。函数可以接受任意多个的任意类型的实参。能理解吗?然后我这里用了foreign。用了过后呢,我就用Switch语句进行了一个类型断言,我怎么写的,大家看Switch这个S。是什么呀,是不是X就是你这个。It里面遍历出来的各个元素。然后呢,x.type注意这个type是一个固定的写法,是一个关键字。那么这个type呢,就说他会判断哦,你这个x.type过后进行一个类型断言过后,你这个X到底是什么类型呢?可能是一个布尔类型。
02:08
可能是一个FLOAT64,可能是个int或者INT64。或者其他类型。那么如果是对应的类型,就会进入到对应的这个case语句,然后呢,我把它相应的这一个值,还有它是第几个参数。数出来了能理解吧,所以说这个函数呢,在我们。将来写项目的时候需要去判断。就是说不确定的这个时差到底是什么类型的时候呢,可以用这个函数来完成。能理解我的意思吧?好,那么我们不说废话,我们来写一把。我们来完成第二个应用案例。来,跟上老师思路。啊,Sir。Apply。零二。好的。然后呢,我们新建一个文件命顶构。
03:01
问题吧。然后为了推一个懒呢,我把前面这一部分。拿来为我所用。然后我写一个主函数。OK啊OK,现在呢,我写一个函数来玩一把。比如说我现在呢。编写。编写一个函数。可以判断。输入的时差。输入参数是什么类型?什么类型能理解我的意思吧?好,那么我们开始开始写啊。Funk。Type。价值。价值,那为了这个参数,它的个数和类型不确定的情况下,我们用这样写it。我不知道有多少个点点点。类型呢,我用interface空类型。如果这样写的话,大家都知道。
04:00
嗯,那你传递的参数个数,还有还有它的类型呢,就是不确定的了。我都可以接收,能理解。好,现在呢,我们用一个Switch语句来搞定它。Switch sh什么类型啊?我们来一起看一看,那就用负循环线。然后呢,先把这个索引给取出来,Index。然后呢,是一个值对吧,这个值我们就叫X吧。然后等于。对谁进行一个便利啊?对it进行一个便利。是这个意思吧,然后在这里面我们用Switch来搞定它,Switch什么呀。X。括起来。就是x.type那现在呢,我们就kiss一下。如果等于布尔类型。如果等于布尔类型。
05:01
我们就提示一句话。就说第几个参数是类型。F格式化一下就是。第几个参数呢,百分号。参数。布尔类型。值是多少?好吧,那参数的是第几个参数是不是刚好是index啊。所以说我这里面写个。Inta。值是多少?是不是你这值是多少,是不是就是X。是不是就是X啊。没问题吧,就这个X,好,第一个咱们就写完了,其他以此类推。其他意思类推。那么如果是float。三二。对吧,我们这改成FLOAT32。好,同样的道理。假设是类型。FLOAT64呢?
06:00
咱们可以写个FLOAT64。对吧,FLOAT60假设它是一个int类型。比如说是int或者INT32。或者是。我一次性把它全部判断。可以吧?INT64,那么我直接就说是一个整数类型。证书类型。对吧,值是什么,V也把它打印出来,最后呢,我们还可以判断它是不是一个字符串。是正。对不对,好,我把它输出来。输出来,然后呢,我们说第几个参数是字符串类型。价值是多少,打印出来的?还有一种就是可能类型不匹配,一个都没匹配到。Default。对吧,我们说一下就是类型不匹配,找不到,不知道这个类型是什么。多少个参数类型不确定。的类型。不确定。对吧,值是多少,我也可以把它输出来,好了,同学们,那现在呢,这个案例我们就写完了,这个方法就写完,我们来试一下。
07:07
比如说现在我有这么几个参数。有这这个上数第一个,比如说N1。N1,好吧,N1呢,我给他了这么一个值,就VRNE1。Float。三二等于。1.1没问题吧,N2。六四。我们可以看到它能不能把它区分出来。负六四等于2.3。我们再来一个N3。Int,比如说INT32吧。等于多少呢?30,好,我们再来一个名字。是一个字符串类型的,就叫做汤姆写完了。那这个时候呢,我想用这一个。函数来判断他们到底是什么类型。对吧,我想判断它到底是什么类型,那怎么办呢,我可以用。
08:02
比如再来一个。比如有一个地址ad res,我直接用类型推导给了北京。看清楚了啊,然后呢,我再来一个N4。N4我直接给了一个整数,比如说是300。我想判断这六个。数据类型,呃,这是六个变,这六个,这六个变量它到底是什么类型,我就可以用。太价一次性判断完毕。来看一下。N1。N2。N3。Name。A address。Ad res,最后N4写完了。大家看我们能不能跑起来啊,那为了好看这个地方我得加一个斜杠N,为什么呀,如果我不加斜杠N,它就会全部。打到一行输出,这样子格式化。就很乱了。好朋友们,我们来跑一跑,看哪没写错了啊。
09:01
这有问题。Are?Re ES。好吧。是不是六个参数啊。穿进去了。那现在呢,我们来运行一下。CD点点。CD address。零二。命顶购好。包起来,诶,我们来看看这个结果跟我们想象的是不是一样的。那看。第一个参数。我们看一下啊,同学们。第一个参数是32。确实是第二个。呃,第二个参数,因为因为我是从零开始的啊,如果为了好看的话呢,其实我这里面可以再做一个处理。是不是可以这样加一下一啊。我把这个加一下一,这这样就就可以解决这个问题,对不对。这样子我们不在这加。因为为了好看呢,我可以在这index加加一下。
10:05
还不行,他便利啊,便利的话还麻烦。便利的话,那只能在这加。算了,我就不去处理了啊,如果你想把它做的更好一点,你把这个index加一下一就更好看了,那我这里就不去处理了,不去处理了,大家看一下就行。再看这里。第一个。三二。第二个就是。整数类型也出来了,十寸十寸。大家可以看到,通过这一个。类型断言的函数呢,我们就可以非常灵活的去判断你这个传进来的参数到底是什么类型。到底是什么类型,明白。这这个呢,就是我们。这种在项目中可能会用到的一个。比较常用的函数。我们自己写了一把,干什么呢?可以用它来判断我们传入的实参到底是什么类型。
11:01
能理解吧,所以说这个地方呢,也也是我们这一个类型断言的一个经典使用场景。希望同学们能够掌握它。好,我把这个场景代这个代码呢,也给同学们。拷贝一下。好,这个是最佳时间二。个。最佳时间二。我们给他一个标题三。最佳时间二,这个最佳实实间二呢,我们写了一个函数。循环的判断。传入参数的类型,这个还是用的比较多的,同学们。好,我把代码给大家整理一下。好,这个代码因为比较少,我把核心代码。给大家整理一下啊。OK,跟上老师思路。这段话比较少。我就直接。给大家做一个剪辑。从这开始截取。到23行。没问题吧?然后呢,第23行开始继续截取。
12:02
23。24号开始。OK。放到这里,大家看看明白了没有看明白啊。那做完这个最佳时间过后呢,老师还有第三个最佳时间。这个第三个最佳实践案例呢,我要求同学们自己去完成。大家看我这有一段要求。最佳实验案例三在前面的代码基础之上增加判断student类型和新student类型。就是说,Student类型和。指针类型。你能不能给我判断出来?能理解吗?什么意思,就说你能不能。在我这个基础上。再给我增加两个类型判断,比如说我这有个学生结构体。比如说type。这一个。Student。
13:00
能能理解。那现在呢,假设我这里有一个。这样的类型16.1。等于。Student。还有一个16点的二。我来一个。只是内心。那么当我把16.1和十六二也传进去的时候,能不能?通过这个函数也把它判断出来,它是一个什么样的类型,它到底是student类型呢?还是student指针类型?这个大家。想一想能不能做出来。如果你正在看视频的话呢,请大家把这个视频停掉,思考一分钟,然后。再回头看老师这段代码的评讲。好,现在可以停下。OK啊。我相信同学们刚才通过一分钟的思考,应该大体知道怎么来完成来。
14:03
我们一起来走一下。其实要完成这个功能非常的简单。你只需要在这里再加一段代码,叫加一个什么呢。16人。如果类型是student。就这样写就完了。好,你可以这样写。第多少个参数是?Student。值是多少?也可以这样输。指针类型呢?也可以这样写简单吧。七哥。第几个参数是?Student的值类型。然后呢,它的值是多少,也可以这样输出。当然。同学们想。因为这个student在这已经出现的类型,而你把student类型写在这个屁股后面的话,同学们想当我保存的时候会不会报错?会不会报错?我们可以看到。我们可以看到,当我们来运行一下啊。我把这两个传进去。
15:01
我把。STUDENT1。和student二传进去。我们来跑一跑。看看他能不能跑起来。我们可以看到,其实这个地方他也能够搞定他。大家看。大家看。因为我这个这个在调用的时候啊,这个student类型已经被加载到内存了,因此呢,你把这个student类型写在后面呢,它也是知道这个student是什么的。但是最好啊,我建议同学们最好把这个定义写在前面去更好一点,因为这样呢,更利于我们的理解,对吧,相当于说我先定义一个。定义。Student。那下面呢,这个方法用到了这个类型,这样呢更好理解。虽然你可以把这个。定义或者要声明写在type架起后面也可以跑起来,但是呢,写在前面更适合这种代码的理解。
16:03
代码里写到上面更好,那同学们可以看到此时此刻。我们。就可以判断了。第六一个参数。16吨的一。大家看这里啊。再看这里。STUDENT1。他的确是。是student的类型。第七个参数。这其实就是就是第八个参数了,对吧,它是什么呀,它是一个指针类型。也能够判断出来。因此我们这个类型断言不但可以判断已有的数据类型。也可以判断你自定义的数据类型,因为student这个类型呢,其实是我们自定义的。在我们进行类型断言的时候,这个自定义的类型也是可以。直接通过类型断言来判断的。能理解这意思吧?好的,同学们,我把这个呢也给大家板书一把。板书一把好,这是我们讲的第三一个最佳时间。
17:03
加深了对它的认识,对不对?OK。好,现在呢,我把这个核心代码给同学们放过来就可以了,我不全部粘了啊,同学们,我不全部粘了,我就粘这一段核心的代码。核心代码就是这一段。哪一段呀,来看一看。从这里开始。然后我的这一段核心代码就是这里。是不是在这里我们做了一个类型断言?对不对。好的,我把它板书到这里来。大家看看这个能不能理解。好,同学们,那么关于我们讲的类型断言的这一块的内容。这块内容就是。包括他的引出,他的介绍,还有呢,他的最佳实践,我们就给同学们介绍到这里,大家好好的领会一下,最好把老师写的代码怎么样敲一遍。
18:06
敲一遍过后呢,你才能够。更加准确的认识和理解我。我们这个类型断言。好的,那关于这一块,我们就先说到这里。
我来说两句