Scala模式匹配

模式匹配是scala中非常强大的功能,类似于java中的switch case;在scala中模式匹配用match case 表达,不仅可以匹配变量值,还可以匹配变量类型、Array/List 值、case class 、Option等。

1.模式匹配基本语法

scala 使用match … case …替代swich case,可匹配变量类型、集合元素、有值或者无值,只要有一个case分支满足条件就不会继续往下(java中需要break停止)

Object Test extends Apps{
	def judgeGrade(grade: String){
		grade match {
			case "A" => println("you grade is " + grade)
			case "B" => println("Good")
			case _ => println("you need work hard")
		}
	}
	judgeGrade("A")
//使用if守卫
	def judgeGrade1(grade: String,name: String){
		grade match:{
			case "A" => println("excellent")
			case "B" => println("good")
			case _ if name == "joe" =>println(name + " done good")
			case _grade if name == "jack" => println(name + " you grade is " + _grade)
			case _ => println("work hard")
		}
	}
}

2. 类型匹配

scala模式匹配的强大在于其对类型的匹配,语法: case 变量: 类型 =》 方法体。

def getException(e: Exception){
	e match{
		case e1: FileNotFoundException => println("Exception is " + e1)
		case e1: IllegalArgumentException => println("exception is " + e2)
		case _ : println("don't know Excetion")
	}
}

processException(new FileNotFoundException("file no found"))
  processException(new IllegalArgumentException("delete zero"))  //exception is java.lang.IllegalArgumentException: delete zero

3. 对Array和List匹配

//数组匹配
def greeting(arr: Array[String]){
	arr match{
		case Array("cys") => println("hi, cys")
		case Array(name1,name2,name3) => println(name1+ "," + name2)
		case Array("joe", _*) => println("xxx")
		case _ =>println("yaya pei")
	}
}
greeting(Array("cys")
greeting(Array("cys","joe","jack"))
greeting(Array("cys","joe","jack","joyce"))

//List匹配
def greetingList(list:List[String]){
	list match{
		case "cys"::Nil => println("cys")
		case name1::name2::name3::Nil => println(name1 + "," + name2)
		case name1::tail => println(name1 + " introduce your friends" )
		
		case _ => println("xx")
		
	}
}

4.case class 匹配

scala中提供了一种特殊的类,case class, 类似于java中的java been,其中只声明field,java编译时会自动生成getter和setter方法;case class 的主构造函数中的参数通常不需要val或var修饰,默认为val。

class Person
case class Teacher(name: String, subject: String) extends Person
case class Student(name: String, classroom: String) extends Person

def judgeIdentity(p: Person){
	p match {
		case Student(name,classroom) => println("Student, name is" + name + "classroom is " classroom)
		case Teacher(name,subject) => println("Teacher " + name)
		case _ => println("don't know identity")
	}
}

5.Option与模式匹配

scala中一种特殊类型为Option, 它有两种值【Some,None】,Some表示有值,None表示无值

//Option
def grades = Map("cys" -> "A" ,"joe" -> "B")
def getValue(name: String){
	val grade = grades.get(name)
	grade match{
		case Some(grade) => println("you grade is " + grade)
		case None => println(" no name in map" )
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值