<>模式匹配

Scala有一个十分强大的模式匹配机制,可以应用在很多场合:switch语句、类型查询,以及“析构”(获取复杂表达式的不同部分)。除此之外,Scala还提供了样例类,对模式匹配进行了优化。模式匹配类似于Java中的switch
case语法,即对一个值进行条件判断,针对不同的条件进行不同的处理。
  
但是Scala的模式匹配的功能比Java的swtich case语法的功能要强大的多,Java的switch
case语法只能对值进行匹配。Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case
class进行匹配、甚至对有值或没值(Option)进行匹配。

Scala使用match case语法进行模式匹配,语法如下:
变量 match{ case 值1=> 代码 case 值2 => 代码 case _ =>代码 }
如果值为下划线,则代表了不满足以上所有情况下的默认情况该如何处理,类似于Java中的default语句

<>使用类型匹配进行异常处理

异常处理是编程任务当中常常需要去解决的问题。简单来说,异常处理就是在程序运行当中出现问题时,用来打断程序执行的方式。而Scala当中,异常处理的实现与Java类似。
object LearnTypeMatch { def matchType(obj:Any): Unit = { obj match {
//对类的类型进行匹配 case int:Int => println("Int") //如果obj对象是一个Int型变量,输出字符串 case string:
String => println("String") //如果obj对象是一个String型变量,输出字符串 case map:Map[_,_] => map
.foreach(println) //如果obj对象是一个Map型变量,遍历这个Map的所有元素 case _ => println("other type"
) //如果上述类型均无法匹配,则输出字符串 } } def main(args: Array[String]) { //声明四种类型的变量 val int =
3 val string = "hello scala" val map = Map("Alice" -> 10, "Bob" -> 3) val other
= 3.5 //将这四个变量传递给matchType函数 matchType(int) matchType(string) matchType(map)
matchType(other) } }

如要对一段代码的执行进行异常检测,使用try将这段代码包起来,在catch语句中进行异常的匹配,借用了模式匹配的思想catch语句中是一系列的case字句。需要注意的是与try……catch成对出现的还有finally语句-用于执行不管是正常处理还是有异常发生时都需要执行的步骤。
object LearnExceptionMatch { def exceptionMatch(): Unit ={ try{ val i = 10/0
//这行代码显然是错的,在数学计算中,0是不能作为除数的, println(i) } catch { case e:ArithmeticException =>
println("Divisor cannot be zero") //判断异常的类型是不是ArithmeticException,如果是输出字符串 case
e:Exception => println(e.getMessage) //如果是其他异常则输出异常信息 } finally { println(
"Hongya Scala") //输出一句话,由于这句话在finally结构中,因此肯定会执行。 } } def main(args: Array[
String]) { exceptionMatch } }
<>使用样例进行模式匹配

Scala没有Java中的switch case,它有一个更加强大的模式匹配机制,可以应用到很多场合。

Scala的模式匹配可以匹配各种情况,比如变量的类型、集合的元素、有值或无值。

模式匹配的基本语法结构:变量 match { case 值 => 代码 }

模式匹配match
case中,只要有一个case分支满足并处理了,就不会继续判断下一个case分支了,不需要使用break语句。这点与Java不同,Java的switch
case需要用break阻止。如果值为下划线,则代表不满足以上所有情况的时候如何处理。

模式匹配match case最基本的应用,就是对变量的值进行模式匹配。match是表达式,与if表达式一样,是有返回值的。
object LearnCaseClass { def caseClassMatch(person:Person): Unit = { person
match { case CTO(name,floor) => println("CTO name is: " + name + " , floor is: "
+ floor) //判断类是否是CTO类 case Employee(name,floor) => println("Employee name is: "
+ name + " , floor is: " + floor) //判断类是否为Employee case _ => println("other")
//如果不满足上面的判断条件,输出字符串 } } class Person //声明一个类 case class CTO(name:String, floor:
String) extends Person //声明CTO类 case class Employee(name:String, floor:String)
extends Person //声明Employee类 case class Other(name:String) extends Person
//声明Other类 def main(args: Array[String]) { //将三个变量带入 caseClassMatch(CTO("PK",
"22")) caseClassMatch(Employee("Zhang San", "2")) caseClassMatch(Other("other"))
} }
除此之外,Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信