00:00
趋于常量的匹配,这个其实就类似于Switch case,那整体来讲应该是最简单的一种运用了,接下来我们要介绍的是给它更加复杂一些的匹配的情况,那第二种能够匹配什么呢?能够匹配类型,哎,我们看一下我们定义。当前这个match case的时候,传入的是一个变量,那么我们一般情况case呢,给的是一个准确的值,那假如说这里边我们不给出准确的值,而是给出一个变量的名称,然后后边跟上对应的类型的话,这相当于我们的要求就是必须要满足当前的类型才能够正常的匹配的上啊。那比方说现在我们定义一个分段当前匹配类型的这样的一个方法函数describe类型,这样传入的还是一个any类型的X,这里边我们返回一个string,同样X match里边,在这里边我们就看了,如果当前它是int类型的话,我把当前的这个变量。
01:14
叫做I接收我们当前X的值,这是必须得是一个int类型,哎,那如果是这样的话,我这里就直接输出int,然后加上当前A值,所以这个基本上跟我们平常这种语法起来都是一样的啊,不过就是好像是另另外定义了一个变量来接收当前的值一样,如果是string的话,那我们就输出string加上值啊,那另外当然就是能够想到的啊,比方说还有一些。对应的集合类型,其实也可以做这样的一个判断,比如说我们可以定义一个list。是一个list类型啊,那当然了,List里边必须要有一个泛型啊,如果说我们这里面判断的是the string的话,这边我们就直接把list打印出来,然后后边把这个in the list啊,调它的to string方法,先做一个输出,那当然了,与之对应的我们还可以一个array。
02:22
它也需要有泛型,比方说我们是int,那么这里边打印的时候也是arra,嗯,然后啊对应的啊,像这个array的话,那本身它是对应方法说的是引用,所以这里边我们需要把它做一个。Make string输出这上去写,其实都是可以的啊,那当然一般情况上面如果要是都没有直接匹配上的话,我们最后还是需要有一个兜底的方法,如果说你什么都就是没有依赖于当前这个值,兜底方法就是不做特别其他的事情的话,那用下划线就可以,如果说兜底方法我们还想拿到当前的值的话,诶,那这个我就需要单独给一个名称了,比方说我就叫做A,接下来我就比方说把这个叫做不知道是什么类型啊,我们就说something else,直接把a string,然后放到这,哎,这样的话可以应用到获取到当前传进来的这个值,像上面这个下划线这种形式,它只能定义一个。
03:39
与当前值无关的一个默认的返回啊,而不能获取到我们当前的这个变量啊,那现在我们可以做一个具体的测试。Line describe type在这里边含一个整数的值乘进去看它输出是什么,同样也可以快type还一个进去看它返回是什么东西啊,那接下来我们还继续要测试这个。
04:10
对应的集合类型,比方说我们传一个当前是list stream嘛,所以list里边I,哎,这样的话,我们看看它能不能匹配的上。对应的你直接copy一下。我们继续看,如果要是里边传的是整数的话。是否能够匹配的上?后面我们还可以继续看,如果传入AR瑞,哎,大家就看到如果传入AR瑞hi hello的话是否匹配。还有如果直接传入瑞二二十三的话,是否能够匹配,接下来我们来运行一下。
05:00
上面我们这里有分界线啊。好,大家看到这里面我们得到的结果。诶,首先。35没有问题,Ink 35 hello string hello,这个都是完全没有问题的,接下来呢,List hi hello,诶,我们判断是否是list string,这个判断出来了,直接匹配上了,然后关键是下边的这个LIST2 23,我们发现它也直接匹配上了。它也是输出了这个list,哎,这是为什么呢?我们明明要的是list list string啊。这里大家需要注意就是我们在做这个底层做操作的时候,GVM里边其实是有所谓的泛型擦除的。他在这里判断我们当前类型的时候,其实只能判断到我们当前集合类型是一个list类型,至于它里边的泛型是直接被擦掉的,所以不管这里是一个list string,还是一个list int,它其实直接的判断都是一个list,所以这里边他们都能够直接匹配成功。
06:10
这里大家需要注意另外一个比较特殊的地方就是AR瑞不存在泛型擦储啊,因为大家知道AR瑞本身在我们scla的集合类型里边,它是没有直接放在我们的这个skyla集合类型里边的,它是做了影视转换之后才能够调其他的方法的啊,所以它其实在skyva当中是非常底层的一个数据结构,它是对应着Java里边我们基本数据类型,然后定义数组的那种方式,所以在这里它是可以直接判断出对应类型,如果我们传一个string类型的array的话,这里我们看输说的是something else。对应的当然就是它的一个引用了啊,那后边呢,我们还有这个int类型的传进来之后,诶,这个能正常的匹配上。这就是关于类型匹配的这样的一个过程,大家需要小心泛型擦除的这一个特点啊,那在有些情况下是容易出现代码里面出现bug的。
我来说两句