00:00
我们已经了解了模式匹配的基本语法以及模式守卫,我们会发现模式守卫这个特性还是非常好用的,我们可以直接给定一个条件,就相当于可以不去精确的判断数据的具体的值,我们可以直接根据它的一个范围或者说做一个模糊的匹配,直接可以做对应的一些操作了啊,那如果仅仅只是这样的一种特性的话,模式匹配还不足以称得上强大,接下来我们就给大家继续介绍模式匹配还有哪些更为强大的匹配功能啊,那就是我们接下来要介绍的,它可以匹配各种不同的类型。首先。可以匹配常量啊,这个是非常简单的一个应用啊,前面我们讲到类似于Switch case的这种功能,那另外呢,除了匹配常量之外,还能匹配类型。另外呢,它还能直接去匹配对应的一些集合类型的形式,比方说匹配数组,匹配列表,匹配元组,甚至还可以匹配对象及样例类,哎,那这些分别又是怎么用,它表示什么含义呢?接下来我们就一一给大家展开做一个讲解。
01:16
我们在代码里边还是新建一个object做一个测试。S02,现在我们要测的是。啊,相当于不同的类型match types,首先我们这里边要测试的其实第一点还是匹配长点,这就非常简单了,跟前面的定义差不多,我们这里边干脆就来一个函数啊,用来描述任意类型常量的。函数进行匹配啊,就是我们可以传进来一个any类型的变量参数,然后呢,直接根据它的这个类,根据它不同的值输出一个不同的内容啊,那接下来我们把它定义成DEF一个。
02:11
Describe行量进来的这个是一个X类型返回的值呢,哎,那这个其实我们可以直接把它定义成当前的这个一个string类型也是可以的啊,或者我们想要什么样的其他类型都可以单独去定义,这里当然就是X做一个match了意。比方说这里就具体判断值,比方说如果是一的话,那这里边我们直接输出一个就是number啊。啊,那比方说另外如果是一个hello这样一个字符串的话,哎,那我们这里边直接输出一个string。So,那另外我们还可以判断啊,假如说这里边一个for false这样一个值的表达的话,我这里也可以输出类型,其实是被吧啊,那如果按照这个判断,我们把上面这个写成int one更加清晰一些啊,那接下来这个是bulling to,所有的这些都可以去做判断啊,比方说还可以直接给一个符,都是没有问题的。
03:31
我们输出一个是二号,大家会发现啊,当前我们能判断的值其实是有限的,所以在这种匹配常量的判断过程当中,一般推荐大家最后一定要有一个S下划线,相当于做一个default处理啊,那当然这里边就是如果这个default里边咱们都不做,理论上也是可以的,如果它的返回值就变成了unit,如果你这里边要求必须是一个string的话,那还是得有一个string的类型的输出的啊,就是当前这样一个行,那如果说这里边我们没有这一句来的话,那接下来我们做一个具体的测试啊,Printline,因为我们是stream嘛,所以可以直接打印出来sc constant说出一个喽。
04:26
啊,或者我们可以继续测试啊,可以直接输出一个八号,假如说我们这里边来一个根本没有出现过的东西0.3,那那接下来我们看看它会出现什么情况。啊,大家会看到前面两个都正常匹配到了,做了一个输出string hello和叉加,那接下来呢,呃,0.3就直接报了一个match error匹配不到对吧?所以这种我们不可能把所有能取到的值全部列出来嘛,在这种按照常量值进行匹配的时候,一般最好是下面要有一个兜底的方法,那这样的话。
05:09
我们输出这个0.3的时候,那就直接会有一个空字符的输出,当然这里边一般我们是写成下划线,那这里它其实只是一个,只是一个占位符,它并不是通配符的意思,所以在这里边呢,我即使是给一个别的东西,比方说给一个VC,哎,这其实这相当于是我给了一个量名称,接收当前的这个值,哎,所以这样写其实也是对的,只不过呢,呃,后面什么也不做,那其实这个ABC也没用,也相当于是可以把我们当前任意的值都接收过来,做一个兜底的方法啊,所以这个其实并不是绝对要求语法的这种解法啊,那不过我们一般都会常规的把它写成case下划线,这就相当于我们一看到就知道这是一句default语句。
06:00
这个比较推荐大家这么去写。
我来说两句