scala之模式匹配

一、语法
在Java 中有switch 关键字,用于对一个值进行判断,返回针对不同的条件进行不同的处理。在Scala 也有同样的功能实现,并且功能更加强大。
变量 match {
	case value1 => 代码1
	case value2 => 代码2
	...
	case _ => 代码 N
}
二、匹配过滤
import scala.util.Random

object MatchApp {
  def main(args: Array[String]): Unit = {
    val names = Array("P1", "P2", "P3")
    val name = names(Random.nextInt(names.length))

	//简单匹配
    name match {
      case "P1" => println("1")
      case "P2" => println("2")
      case _ => println("3")
    }
	
	//双重条件匹配
    judgeGrade("zhangsan", "A")
    judgeGrade("lisi", "D")
	
	 // 匹配数组
    greeting(Array("zhangsan"))
    greeting(Array("lisi", "wangwu"))
    greeting(Array("zhangsan", "lisi", "wangwu"))
	//  匹配list
    greeting(List("zhangsan"))
    greeting(List("zhangsan", "lisi"))
    greeting(List("lisi", "zhangsan"))
    greeting(List("wangwu", "lisi", "zhangsan"))
  }
  //双重条件匹配
  def judgeGrade(name:String, grade:String): Unit = {
    grade match {
      case "A" => println("Excellent... ")
      case "B" => println("Good... ")
      case "C" => println("Just so so...")
      case _ if (name == "lisi") => println(name + ", you are a significant improvement.")
      case _ => println("You need work harder")
    }
  }

  // 匹配数组
  def greeting(array:Array[String]): Unit = {
    array match {
      case Array("zhangsan") => println("Hi: zhangsan")
      case Array(x, y) => println("Hi:" + x + ", " + y)
      case Array("zhangsan", _*) => println("Hi:zhangsan and others...")
      case _ => println("Hi: everybody...")
    }
  }

  // 匹配 List
  def greeting(list:List[String]): Unit = {
    list match {
      case "zhangsan"::Nil => println("Hi: zhangsan")
      case x :: y :: Nil => println("Hi:" + x + ", " + y)
      case "zhangsan"::tail => println("Hi:zhangsan and others...")
      case _ => println("Hi: everybody...")
    }
  }

  // 匹配类型
  def matchType(obj:Any): Unit = {
    obj match {
      case x:Int => println("Int")
      case s:String => println("String")
      case m:Map[_, _] => m.foreach(println)
      case _ => println("Other type")
    }
  }
}
三、case class 匹配
object MatchApp {
  def main(args: Array[String]): Unit = {

    caseclassMatch(CTO("zhaoliu", "22"))
    caseclassMatch(Employee("sunqi", "22"))
    caseclassMatch(Others("zhouba"))
  }
  
  def caseclassMatch(person:Person): Unit = {
    person match {
      case CTO(name, floor) => println("CTO name is: " + name + ", floor is: " + floor)
      case Employee(name, floor) => println("Employee name is: " + name + ", floor is: " + floor)
      case _ => println("Others")
    }
  }
  
  class Person
  case class CTO(name:String, floor:String) extends Person
  case class Employee(name:String, floor:String) extends Person
  case class Others(name:String) extends Person
}
四、异常处理
object ExceptionApp {
  def main(args: Array[String]): Unit = {
    try {
      val i = 10 / 0
      println(i)
    } catch {
      case e: ArithmeticException => println("除数不能为 0")
      case e: Exception => println(e.getMessage)
    } finally {
      // release sources
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值