Scala--模式匹配

模式匹配
1.case 基本用法,对变量的值进行模式匹配
    变量 match {
       case 值1 =>  代码段1
       case 值2 =>  代码段2
       case _  =>  代码段3  不满足值1和值2 到_分支下
    }

    def score(score:String) {
        score  match {
            case "A" => println("优秀!")
            case "B" => println("一般")
            case "C" => println("及格")
            case _   => println("渣渣")   默认的情况要放在最后一个分支
        }
    }

    2.在模式匹配可以添加if守卫
    通过if守卫可以进一步的筛选,针对默认条件进一步筛选。
    def score(score:String, name:String) {
        score  match {
            case "A" => println("优秀!")
            case "B" => println("一般")
            case "C" => println("及格")
            case a if name == "wxz"  => println("分数:" + a + "不用考试")
            case a  => println("分数:" + a + "渣渣")   
        }
    }

或者
def score(score:String, name:String) {
  score  match {
    case "A" => println("优秀!")
    case "B" => println("一般")
    case "C" => println("及格")
    case _ if name == "wxz"  => println("分数:" + name + "不用考试")
    case _  => println("分数:" + name + "渣渣")
  }
}
score("D","WANG")

    3.模式匹配不仅仅可以匹配值, 可以匹配类型,类型和值 混合匹配。
    如果匹配类型,需要给case 条件起一个别名
    def caseType(arg:Any) {
        arg match {
            case e1:Long =>  println("Long类型:" + e1)
            case e2:String => println("String:" + e2)
            case _ => println("其他的类型")
        }
    }

     
    模式匹配,值和类型混合使用,进入匹配语句。从上到下,执行满足的第一条语句。
    注意:混合匹配 范围 从小到大范围。否则会产生死区代码
    def caseMix(arg:Any) {
        arg match {
           case 1 => println("值匹配  1")
           case "two" => println("值匹配 two")
           case e1:Int => println("类型匹配  Int")
           case e2 => println("其他值或者类型")
        }
    }

    死区代码:逻辑错误,有些语句一直无法执行到
    def caseMix(arg:Any) {
        arg match {
           case e1:Int => println("类型匹配  Int")
           case 1 => println("值匹配  1") //死区代码
           case "two" => println("值匹配 two")
           case e2 => println("其他值或者类型")
        }
    }

    4.针对集合类型的模式匹配
    Array  List
    
    def caseCollection(arg:Array[String]) {
        arg match {
             //元素的个数匹配,数据个数为3
             case Array(a1, a2, a3) => println("数组的个数为3")
             //数组中以 "candle"开头
             case Array("candle", _*) => println("以candle开头")
             //数组中固定元素筛选
             case Array("jack", "tom") => println("固定元素")
             case _ => println("其他.......")

        }
    }

    
    List集合
    def caseList(arg:List[String]) {
         arg match {
            //元素个数匹配  Nil 表示结束
            case a1::a2::a3::Nil => println("个数为3")
            //以candle开头
            case "Candle"::tail => println("以 candle开头")
            //包含固定元素
            case "jack"::"tom"::Nil => println("xxxxxxxx")

            case _ => println("其他的情况")
         }
    }


    5.case class样例类
    样例类就是java中javabean的一种快捷定义方式
    样例类中只定义field,编译器自动添加set和get方法 
    case class Student(var name:String, var age:Int)

    
    6.option 和case
    option 有两种类型值,一种称为 Some,表示有值,另外一种None,表示没值

    val mayMap = Map("candle"->18, "jack"->19, "tom"->13)

    def getMapValue(name:String) {
        val age = mayMap.get(name)

        age match {
           case Some(age)  => println("age  is " + age)
           case None => println("没有这个Key")
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值