更新时间:2023-08-18 来源:黑马程序员 浏览量:
Scala提供了强大的模式匹配机制,最常见的模式匹配就是match语句,主要应用于从多个分支中进行选择的场景。不仅如此,Scala还提供了样例类,它可以对模式匹配进行优化,提高匹配的速率。接下来,针对Scala提供的模式匹配和样例类进行详细讲解。
    Scala中的模式匹配是由 match case组成,它类似于Java中的switch case,即对一个值进行条件判断,针对不同的条件,进行不同的处理。
    模式匹配的语法格式如下:
表达式match{
    case模式1=>语句1
    case模式2=>语句2
    case模式3=>语句3
}
上述语法格式中,match关键字主要用来描述一个表达式,位于表达式位置的后面;case关键字主要用来描述和表达式结果进行比较后的模式,若发现有一个模式可以与表达式结果进行匹配,则执行所匹配模式对应的语句,而剩下的模式就不会继续进行匹配。
下面,定义一个方法matchTest(),方法的参数是一个整型字段,而方法的调用则是对参数进行模式匹配,若参数匹配的是1,则打印输出one;若参数匹配的是2,则打印输出two;若参数匹配的是_,则打印输出many,具体实现代码如下所示。
object PatternMatch{
   def main (args: Array[String]) {
       println (matchTest(3))
   }
   //模式匹配
   def matchTest(x: Int): String =x match {
       case 1 =>"one"
       case 2 =>"two"
       case _ =>"many"
   }
}
第3行代码调用了matchTest()方法,传入的参数是3,此时,与case_进行匹配,由于case_对应的执行语句是打印输出many,所以控制台会输出many控制台的输出结果如图所示。
     
模式匹配操作控制台输出的结果
在Scala中,使用case关键字来定义的类被称为样例类。样例类是一种特殊的类,经过优化可以被用于模式匹配。下面,使用case定义样例类Person,并将该样例类应用到模式匹配中,具体代码如文件所示。
object CaseClass {
   //样例类
   case class Person (name: String, age: Int)
   def main (arga: Array[String]) {
       val alice =new Person ("Alice", 25)
       val bob =new Person ("Bob", 32)
       val charlie =new Person("Charlie", 32)
       for (person <-List (alice, bob, charlie)) {
           //模式四配
           person natch {
              case Person("Alice", 25) ▪>println("Hi Alice!")
              case Person("Bob", 32) ▪>println ("Hi Bob!")
              case Person (name, age) m>
                       println("Name: "+name +"\t"+"Age: " +age)
           }
       }
   }
}
上述代码中,第3行代码创建了一个样例类Person;第4~14行代码是主方法main(),在主方法中创建了样例类Person的3个实例对象alice、bob和charlie,并通过模式匹配将实例对象与样例类Person进行匹配,从而进行不同的处理。
运行上面的代码,效果如图所示。
    
样例类的运行结果
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19