Scala语言中的模式匹配可以看作是对Java语言中switch语句的改进,但与Java switch语句中只能使用Java的原生类型或枚举类型不同的是,Scala语言可以处理更复杂的数据类型,如String、类、变量、常量、构造器及其他复杂类型等。为加深对Scala模式匹配的理解,先来看一个Java switch语句的例子,如例4-1所示。代码中的case 50:System.out.println("50");后面未加break语句,此时便会意外掉入case 80:System.out.println("80");这一分支,在变量i值为50时,除执行System.out.println("50")外还会执行System.out.println("80")。
【例4-1】Java switch语句示例。
本例中第10行因为case 50语句最后没有加break语句,执行后得到如下内容:
可以看到80被输出两次,原因是第11行代码没有加break语句,导致意外掉入另一个分支,显然这跟预期不符合,Scala中的模式匹配可以解决这一问题,如例4-2所示。使用Scala的模式匹配可以避免Java语言中的switch语句导致意外陷入分支的情况,保证程序逻辑的正确。
【例4-2】Scala模式匹配替代Java switch语句示例。
上述代码执行结果输出如下:(www.daowen.com)
例4-2中第3~8行演示了Scala模式匹配的用法,match关键字前面为待匹配变量,后面{}中的内容为对应匹配情况,例如第4行case 10=>println(10)表示如果变量i值为10,则匹配成功,匹配成功后执行=>右边的语句println(10)。从代码执行结果可以看到Scala模式匹配可以避免Java switch语句中意外掉入另外一个分支的情况。不难看出,Scala模式匹配语法非常简洁,而且比Java switch语句更为灵活,其基本语法格式如下:
Scala模式匹配中的case语句还可以加if守卫条件,如例4-3所示。与普通的模式匹配中的case语句不同,Scala中的case语句还可以通过case if(i%4==0)这种带守卫的方式,对变量的值进行判断。
【例4-3】带守卫条件的模式匹配示例。
代码执行结果如下:
例4-3中,第7~10行代码演示了如何在模式匹配中增加守卫条件,例如第8行代码case_if(i%4==0)=>println(i+":能被4整除")表示第4~6行代码都没有匹配成功的情况下,i如果能被4整除,则执行println(i+":能被4整除")语句。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。