Scala之模式匹配

本文介绍了Scala中的模式匹配特性,包括基本使用、匹配常量、匹配类型、对象匹配和匹配序列。通过示例展示了如何使用模式匹配进行条件判断、类型检查以及从Option类型中安全获取值。此外,还展示了如何匹配序列并提取元素。
摘要由CSDN通过智能技术生成

二、模式匹配

函数编程语言的标配,类似于java的switch

2.1 基本使用

要匹配的值 match{
    case 选项 => 
       //代码
   case 选项 => 
       //代码
    
} 

eg:

   object PatternDemo1 {
  def main(args: Array[String]): Unit = {
    val a:Int = 10
    val b:Int = 20
    val op:String = StdIn.readLine("请输入一个运算符:")
    op match {
      case "+" =>
        println(a+b)
      case "*" =>
        println(a*b)
      case "/" =>
        println(a / b)
      case _ =>   //匹配任意的情况
        println("你的运算符不对!")
    }
  }
}

注:case Ba=> 变量是大写字母开头,scala认为这个变量是一个常量,必须是已经定义好的常量

2.2 匹配常量

1.首字母大写;2.‘Ba’ 加反引号 3.case_ 本周就是匹配变量,只是把变量的名字省略了

模式匹配的值:匹配成功的那个case的最后一行代码的值

  object PatternDemo2 {
  def main(args: Array[String]): Unit = {
    val a =10
    val b = 20
    val op:String = StdIn.readLine("请输入一个运算符:")
    val res:Int = op match {   //模式匹配的值返回并赋值给res
      case "+" =>
          a+b
      case "-" =>
          a-b
      case "*" =>
          a*b
      case _ => -1
    }
    println(res)
  }
}

2.3 匹配类型

 val a:Any = "abc"
a match {
  case a:Int => println(a+10)
  case s:String => println(s.toUpperCase())
  case b:Boolean => println(b)
  case _=>
}

2.4 对象匹配

Option的使用(解决java中的空指针异常)
apply方法有点类似于java中的构造函数,接受构造参数变成一个对象。那么unapply方法就刚好相反,他是接受一个对象,从对象中提取出相应的值。unapply方法主要用于模式匹配中。
Option类型只会返回Some或None类型对象。
eg: 使用对象匹配的方式把一个数的平方匹配出来

object Sqrt{
  def unapply(d: Double): Option[Double] =
    if(d >= 0) Some(Math.sqrt(d))
    else None
}
object OptionDemo {
  def main(args: Array[String]): Unit = {
       //使用对象匹配的方式把一个数的平方匹配出来
     val d:Double = 9
     d match {
       case Sqrt(a) => println(a)
     }
  }
}
     

2.5 匹配序列

object MyArray{
  def unapplySeq(s:String) =
    if(s!=null)
      Some(s.split(",").toList)
    else None
}
object ObMath1 {
  def main(args: Array[String]): Unit = {
     val names:String = "lisi,zhangsan,wangwu,zhiling,fengjie"
     names match {
       case MyArray(a,b,rest@_*) =>
         println(a)
         println(b)
         println(rest)
     }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值