Scala模式匹配类型

本文详细介绍了Scala中的模式匹配,包括常量匹配、类型判断、数组、集合、元组和样例类的匹配用法。通过实例展示了如何在不同场景下运用模式匹配,揭示了样例类在模式匹配中的优化特性及其伴生对象的默认方法,如unapply。
摘要由CSDN通过智能技术生成

说明:

Scala模式匹配类型包括:常量、类型判断、数组、集合列表、元组、对象(样例类)等。

匹配常量:

Scala中,模式匹配可以匹配所有的常量,包括字符串,字符,数字,布尔值等。
案例

def main(args: Array[String]): Unit = {
    def describe(x: Any)= {
      x match {
        case 1=>"整数1"
        case "wan"=>"hello wan"
        case 12.5=>"double 12.5"
        case _=>"不知道是啥"
      }
    }
    println(describe(12.5))
  }

匹配类型:

案例

def main(args: Array[String]): Unit = {
    def describe(x: Any):String = {
      x match {
        case a:Int=>"Int"
        case b:String=>"String"
        case c:Boolean=>"Boolean"
        case d:Double=>"Double"
      }
    }
    println(describe("wanjialin"))
  }

匹配数组:

案例

def main(args: Array[String]): Unit = {
    def match1(arr:Array[String]):Unit={
      arr match {
        case Array("wan")=>println("kb15 arr")
        case Array(str1,str2)=>println(str1,str2)
        case Array("wan",_*)=>println("以wan开头的")
        case Array(str1,str2,"wan",_*)=>{
          val length = arr.length
          for(i<-0 until length)
            println(arr(i))
          println("第三个是wan")
        }
      }
    }

    val strings = Array("wan", "jia", "lin")
    match1(strings)
  }

匹配集合:

案例

def main(args: Array[String]): Unit = {
    val list:List[Int] = List(1,2,3,4,5)
    println(list match {
      case List(0) => "0"
      case List(1, _*) => "以1开头的集合"
      case _ => "其他的集合"
    })
  }

匹配元组:

案例

def main(args: Array[String]): Unit = {
    val tuple2:Tuple2[Int,Int] = (1,2)
    println(tuple2 match {
      case (0, _) => "以0开头的元组"
      case (x, y) => "" + x + "" + y
      case _ => "其他的"
    })
  }

匹配样例类:

案例

def main(args: Array[String]): Unit = {
    case class Student(name:String,age:Int)

    def match1(student: Student):Unit={
      student match {
        case Student("wanjialin",age)=>println("hello wanjialin age is "+age)
        case Student("wan",4)=>println("wan学习已经四个月了")
        case Student(name,32)=>println("名字:"+name+"age is 32")
      }
    }
    match1(new Student("wanjialin",22))
  }

说明
(1)样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,如apply、unapply、toString、equals、hashCode和copy
(2)样例类是为模式匹配而优化的类,因为其默认提供了unapply方法,因此,样例类可以直接使用模式匹配,而无需自己实现unapply方法、
(3)构造器中的每一个参数都成为val,除非它被显式地声明为var

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万家林

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

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

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

打赏作者

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

抵扣说明:

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

余额充值