Scala学习——模式匹配

摘要:
Scala模式匹配1.基本matchcase(类似于Java中的switchcase,但更强大)objectMatchApp{defmain(args:Array[String]):Unit={valis=Array(“a”,“b”,“c”,“d”)vali=is(Random.nextInt(is.length))//随机获取数组imatch{case“a”=˃println(“aaa”

scala模式匹配

1.基础match case(类似java里switch case,但功能强大些)

object MatchApp {
 
  def main(args: Array[String]): Unit = {
    val is = Array("a","b","c","d")
    val i = is(Random.nextInt(is.length))//随机取数组中的一个值
    i match {
      case "a" => println("aaa")
      case "b" => println("bbb")
      case "c" => println("ccc")
      case  _  => println("没有此匹配")
    }
  }

2、带条件的模式匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
    judgeGrade("jack","A")//非常好
    judgeGrade("lucy","B")//
    judgeGrade("lucy","D")//lucy同学,该努力学习了
    judgeGrade("jack","D")//同学,该努力学习了
  }
 
  def judgeGrade(name:String ,grade:String): Unit ={
    grade match{
      case "A" => println("非常好")
      case "B" => println("好")
      case "C" => println("一般")
      case _ if(name == "lucy")  => println(name+"同学,该努力学习了")//带条件筛选
      case  _ => println("同学,该努力学习了")
    }
  }
}

3、Array模式匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
 
    greeting(Array("a"))//hi,a
    greeting(Array("b","c" ,"d"))//hi.everyone
    greeting(Array("a","b","c" ,"d"))//hi,a and others
    greeting(Array("c" ,"d"))//hi,c d
 
  }
 
  def greeting(array:Array[String]): Unit ={
 
    array match {
      case Array("a") => println("hi,a")//匹配数组Array("a")
      case Array(x,y) => println("hi,"+ x + " "+ y)//匹配两个元素的数组
      case Array("a",_*) => println("hi,a and others")//匹配以a开头的数组
      case _ => println("hi.everyone")
    }
  }
 
}

4、List模式匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
 
    greeting(List("a"))//hi,a
    greeting(List("b","c" ,"d"))//hi.everyone
    greeting(List("a","b","c" ,"d"))//hi,a and others
    greeting(List("c" ,"d"))//hi,c d
  }
 
  def greeting(list:List[String]): Unit ={
 
    list match {
      case "a"::Nil => println("hi,a")//匹配只含a的List
      case x::y::Nil => println("hi,"+ x + " "+ y)//匹配两个元素的List
      case "a"::tail => println("hi,a and others")//匹配以a开头的List
      case _ => println("hi.everyone")
    }
  }
 
}

5、类型匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
 
    matchType(1)//Int: 1
    matchType("str")//String; str
    matchType(Map("lucy"->18,"jack"->19,"kangkang"->99))//(lucy,18)(jack,19)(kangkang,99)
    matchType(3.14)//其他类型
 
 
  }
  def matchType(obj:Any): Unit ={
    obj match{
      case x:Int =>println("Int: "+ x )
      case s:String =>println("String; "+s)
      case m:Map[_,_] => m.foreach(println)
      case _ => println("其他类型")
 
    }
  }
}

6、异常处理

package top.ruandb.scala.Course05
 
object ExceptionApp {
 
  def main(args: Array[String]): Unit = {
    try{
      val i = 100/0 //ArithmeticException
      println(i)
    }catch {
      case e:ArithmeticException => println("分母不能为0")
      case e:Exception => println(e.getMessage)
    }finally {
      println("用于释放资源,一定能执行")
    }
  }
}

7、class模式匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
 
    caseClassMatch(Cto("lucy","99"))
    caseClassMatch(Employee("jack","7"))
    caseClassMatch(Others("kangkang"))
  }
 
 
 
  def caseClassMatch(person:Person): Unit ={
    person match{
      case Cto(name,floor) => println("hi,"+name +" "+ floor)
      case Employee(name,floor) =>println("hi,"+name +" "+ floor)
      case Others(name) => println("hi,"+name )
    }
  }
 
  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
}

8、Some,None模式匹配

package top.ruandb.scala.Course05
 
import scala.util.Random
 
object MatchApp {
 
  def main(args: Array[String]): Unit = {
 
    getGrade("lucy")//your grade is A
    getGrade("jack")//your grade is B
    getGrade("kangkang")//without your score
 
  }
 
  val grades = Map("lucy"->"A","jack"->"B")
  def getGrade(name:String): Unit ={
    val grade = grades.get(name)
    grade match{
      case Some(grade) => println("your grade is "+ grade)
      case None =>println("without your score")
    }
  }
}

免责声明:文章转载自《Scala学习——模式匹配》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python setup.py 构建C语言基础:C语言指针(6)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java注解反射简单实例

1、创建一个注解 packagecom.anno; importjava.lang.annotation.ElementType; importjava.lang.annotation.Retention; importjava.lang.annotation.RetentionPolicy; importjava.lang.annotation.Tar...

mysql语句中把string类型字段转datetime类型

mysql语句中把string类型字段转datetime类型 在mysql里面利用str_to_date()把字符串转换为日期 此处以表h_hotelcontext的Start_time和End_time字段为例,查询当前 时间在此范围之内的数据。 www.2cto.com select * from h_hotelcontext where now(...

Spire.XLS 在程序中直接打印excel

上代码 if (tbPrintSetBindingSource.Current == null) return; var item_TbPrintSet = tbPrintSetBindingSource.Current as RMES.IBatisEntity.TbPrintSet; fi...

ASP.NET Core 实现 MQTT通讯协议 Demo(开源库:MQTTnet)

1、什么是MQTT   MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和不可靠的网络而设计的。由于以上轻量级的特点,是实现智能家居的首选传输协议,相比于XMPP,更加轻量级而且占用宽带低。简单来说HQTT是一种通信...

在springmvc中配置jedis(转)

主要学习https://github.com/thinkgem/jeesite。一下代码均参考于此并稍作修改。 1.jedis 首先,需要添加jedis: <!--jedis--> <dependency> <groupId>redis.clients</groupId> &l...

各种数据库与.NET Framework类型对照

本文记录各种数据库与.NET类型的对照,包括Oracle,SQL Server,MySQL,SQLite 首先是Oracle的 序号 Oracle数据类型 .NET类型 1 BFILE byte[] 2 BLOB byte[] 3 CHAR string 4 CLOB string 5 DATE DateTime 6 FLO...