scala 模式匹配

package aa.bb

object MatchDemo {

  def method1(x:Int):String={
    if(x==1){
      "one"
    }else if(x==2){
      "two"
    }else{
      "many"
    }
  }

  def method2:PartialFunction[Int,String]={
    case 1=>"one"
    case 2=>"two"
    case _=>"many"
  }

  // 模式匹配
  def match1(x:Int):String={
    x match{
      case 1=>"one"
      case 2=>"two"
      case _=>"many"
    }
  }

  def match2(x:Any):Unit={
    x match {
      case 1=>println("x为1")
      case x:Int=>println("x为整型")
      case s:String=>println("字符串,值为"+s)
      case d:Double=>println("Double类型,值为"+d)
      case _=>println("不知道")
    }
  }
  case class Teacher(name:String,age:Int)

  def match3(teacher: Teacher):Unit={
    teacher match {
      case Teacher("wjj", age)=>println("hello wjj ago is "+age)
      case Teacher("kb15", 4)=>println("kb15学习已经两个月了")
      case Teacher(name, 32)=>println("名字为"+name+" age is 32")
    }
  }

  // level  A B C D   如果 name="bolo" 输出特殊学生
  def match4(level:String,name:String):Unit={
    level match {
      case "A"=>println("优秀")
      case "B"=>println("良好")
      case "C" if name=="zs"=>println("zs!")
      case "C"=>println("合格")
      case _ if name=="bolo" =>println("特殊学生")
//      case _ if(name=="bolo")=>println("特殊学生")
      case _=>println("不及格")
    }
  }

  def match5(e:Exception):Unit={
    e match {
      case e1:IndexOutOfBoundsException=>println("IndexOutOfBoundsException")
      case e2:NullPointerException=>println("NullPointerException")
      case e3:RuntimeException=>println("RuntimeException")
      case e4:Exception=>println("Exception")
    }
  }

  def match6(arr:Array[String]):Unit={
    arr match {
      case Array("KB15")=>println("kb15  array")
      case Array(str1,str2)=>println(str1,str2)
      case Array("KB15",_*)=>println("KB15开头")
      case Array(str1,str2,"KB18",_*)=>{
        val length = arr.length
        for(i<-0 until(length)){
          println(arr(i))
        }
        println("第三个为KB18")
      }
    }
  }

  class Person
  case class Worker(name:String,age:Int) extends Person
  case class Student(name:String,age:Int) extends Person
  case class GongWuYuan(name:String,age:Int) extends Person

  def match7(person: Person):Unit={
    person match {
      case Worker(name,age) if age<25=>println("刚进入社会 ,参加工作不久")
      case Worker(name,age)=>println("共产主义建设者")
      case Student(name,age) if name=="小学生" && age<13 =>println("祖国的花朵")
      case Student(name,age)=>println("学生")
      case gwy:GongWuYuan if gwy.name=="干部"=>println("人民的好公仆")
      case GongWuYuan(name,age)=>println("人民的公仆")
      case _=>println("其他人")
    }
  }

  def main(args: Array[String]): Unit = {
    match7(GongWuYuan("干部",11))
    println("------------------------------------")
    match6(Array("KB11","KU11","KB18","KJ33"))
    println("------------------------------------")
    match5(new NullPointerException)
    println("------------------------------------")
    match4("C","zs")
    println("------------------------------------")
    match3(Teacher("zjh",32))
    println("------------------------------------")
    match2(3.11d)
    println("------------------------------------")
    println(match1(2))
    println("------------------------------------")
    println(method2(3))
    println("------------------------------------")
    println(method1(1))
  }

}

输出

人民的好公仆
------------------------------------
KB11
KU11
KB18
KJ33
第三个为KB18
------------------------------------
NullPointerException
------------------------------------
zs!
------------------------------------
名字为zjh age is 32
------------------------------------
Double类型,值为3.11
------------------------------------
two
------------------------------------
many
------------------------------------
one
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

honconM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值