00:00
我们已经了解到可以利用SKY拉里的模式匹配机制进行常量的匹配和类型的匹配。当然了,前面我们讲到模式首位的时候,还可以利用模式匹配来做一个范围内数据的匹配,那接下来呢,我们继续给大家讲另外的一类匹配方式,那就是还可以匹配一些特定的集合类型。比如说首先我们可以匹配数组类型,匹配数组,匹配数组的话,这个其实非常好理解,比方说呃,我们这里边直接做一个for循环,一个测试,呃,我们定义一下一组数组,就是我们定义一个数组的list,然后做一个对应的便利。我们另一个array,呃,里边只有一个元素零,这是一个基本的情况,然后接下来里边可以多一些元素,有一个一,一个零,这是另外一种情况,我们可以再测一测,有三个元素的010。
01:16
除此之外呢,我们还可以啊,测一些其他的情况啊,比如说我们把这个稍微的数字改一下,呃,110也是三个元素的数组,呃,另外可以多一点数据,二三七十五,最后我们再来测一个。里边有不同类型数据的安妮类型的一个数组楼,诶有一个字符串,然后另外可以有一个30 20这样的一个整数的数组,接下来我们要测试的就是当前所有的这些数组在一些模式匹配定义的定义的模式里边能不能直接配上,我们现在定义一个result吧。
02:12
瑞要做一个match前的match意,如果就是A0的话,这个我们非常好理解,本身瑞零是按照用当前的单立对象,伴生对象去创建出的一个对象的实例啊,所以既然我们有A瑞零,那当前判断这个是否真的是A瑞零,这样一个数据肯定就能匹配的上吧,如果是它的话,直接我们输出一个。零,另外如果要是虽然我们想到了A瑞一零的话,我们可以直接输出ARRAY10,另外呢,如果我们只只是能针对某一个特定的数组里边元素都确定的这种情况做一个对象的判断,呃,那其实这个也没有什么特别的,而且我们知道我不可能把所有的数组可能的情况都判断完,那kla里边的模式匹配呢?
03:19
对于数组的匹配,强大就强大在我们可以类似于定义这种模糊的类型,或者里边具体的数组值的判断,比如说我们这里可以定义一个ara X y,这是表示什么意思呢?这就相当于我们定义了两个变量,一个X,一个Y,他们接收的值是什么呢?接收的是,首先我当前的数据类型应该是一个A瑞,然后呢,里边必须是只有两个元素,这样的话,我会把第一个元素赋给X这个变量,第二个元素赋给Y这个变量。那接下来我们可以打印。
04:01
当前,Ara。后边你加上X的值,然后再加上Y的值。就是我们对于两个元素的数组的一个通用的匹配。匹配两元素不足。那最后我们还可以继续做一些其他类型的匹配,比方说我们还可以指定某一个位置上的值质什么样的东西啊,那这里面我们可以直接定义一个瑞,我们这里比方说零,然后后边来一个下划线芯是表示什么呢?表示的是我们当前的数组,首先个数不见,至少应该有一个元素,而第一个元素必须是零,除此之外,剩下的元素数量完全不限。
05:00
相当于我们这里匹配的就是一个,我们说这是以零开头数组,所以不同类型的数组我们在这里都可以单独的把它定义出来,另外当我们也可以定义,比方说有三个元素的数组XY,而且三个元素我也可以做一个特别的定义,比方说我要求第二个位置上的元素必须是一,哎,这也可以单独定义出来的,那比方说我们这是。直接输出空间唯一的,空间唯一的三元素数组,同个类型我们不可以按照这样的方式把它定义出来,可以定义不同位置的元素,可以定义它的类型,可以定义当前数组里边到底有多少个元素,这些都可以做得到啊。当然了,最后一般我们不可能考虑到所有的情况吧,所以最后一般还是要来一个默认场景的输出,最后兜底的方法,Something else。
06:14
就是我们当前判断的一个过程啊,那接下来我们可以把result得到的结果直接做一个打印输出。我们来运行一下,看看能得到什么样的东西。我们看到首先。前面的第一个瑞零,那当然输出的是零了,这个没有任何的问题,瑞一零我们也有单独的判断啊,那当然输出的就是瑞一零,在下边的A瑞010,这个时候呢,我们是首先判断到它是啊,前面的这几个都不满足,这里我们判断匹配的顺序就是从上到下依次判断,一旦要有一个判断匹配成功,那后面的就全部跳过,不会再去执行了,如果前面的都不成功,那这里判断到了瑞以零开头的数组,哎,这个010是满足的。
07:11
然后再往后看呢,呃,下面是110 110,这里我们会发现前面前面这种情况都不满足,但是它符合中间唯一的三元数组,三元素数组啊,那后边我们再看,如果要是二三七十五的话,这属于啊,就是something else了,没有跟他匹配的,那另外哈,二十三十,这尽管也是三元数。三元素的数组,但是中间不为一,所以这里边也不能匹配啊。当然如果我们把钥匙中间这个值改成一的话,运行一下之后会发现它同样可以输出中间唯一的三元数数数组,这就是关于数组相关内容的匹配,有很多种不同的方法。
我来说两句