scala match匹配

match 常用类型匹配

object TestMatch {
    def main(args: Array[String]): Unit = {
        matchAny("a")
        matchArray()
        matchTuple()
        caseClassMacth()
        matchEnum()

    }


    def matchAny(x:Any): Unit ={

        // 用  match   来替代 isInstanceOf   和  asInstanceOf
/*
        if(ch.isInstanceOf[Char]){
            val c = ch.asInstanceOf[Char]
        }*/

        val result = x match{
            case x:String => "space"
            case x:Char =>  x
            case _ => 0
        }
        println(result)
    }

    // 匹配数组
    def matchArray(): Unit ={
        val arr = Array[Int](0,5,1)
        arr match {
            case Array(x,y) => println(s"x=$x \t y=$y")
            case Array(0,_*) => println("0,_*")
            case _ => println("error")
        }
    }

    // 匹配  元组

    def matchTuple(): Unit ={
        val tuple = new Tuple2("aa","bb")
        println(tuple._1)

        // 常用 下面这种方式
        val (spring,summer,autumn,winter) = ("a","b","c","d")
        println(spring)
    }


    //  caseClass
    def caseClassMacth(): Unit ={
        abstract class Expr
        case class Var(name:String) extends Expr
        case class Number(num:Double) extends Expr
        case class UnOp(operator : String , arg : Expr) extends Expr
        case class BinOp(operator : String , left : Expr , right : Expr) extends Expr
        def simplifyTop(expr : Expr) : Expr = expr match{
            case UnOp("-" , UnOp("-" , e)) => e
            case BinOp("+" , e , Number(0)) => e
            case BinOp("*" , e , Number(1)) => e
            case _ => expr
        }
        println(simplifyTop(BinOp("+",Number(num = 2),Number(num = 0))))
    }

    //模拟枚举  enum
    def matchEnum(): Unit ={
        //sealed 结合  case class 方式 定义枚举     sealed密封 关键字修饰
        sealed abstract class TrafficLight  // 父类
        // red yellow  green  子类
        case class RED(stop:String) extends TrafficLight
        case class YELLOW(warning:String) extends TrafficLight
        case class GREEN(go:String) extends TrafficLight

        val light:TrafficLight= RED(" stop")
        light match {
            case RED(stop) => println(stop)
            case YELLOW(stop) => println(YELLOW)
            case GREEN(stop) => println(GREEN)
        }



        //extends Enumeration 方式 定义枚举

         class Season extends Enumeration{
             val SPRITNG,SUMMER,AUtUMN,WINTER = Value  // 大写   不是values
         }
        val season = new Season
        println(season.SPRITNG)
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值