scala 模式匹配

scala的模式匹配与java的switch case相似,但是switch case只能对值进行判断,scala还可以对类型,集合进行模式匹配。其中最重要的是对case class 匹配。
其中有多种的匹配的模式:

常量变量匹配

  def bigData(data : String): Unit ={
    data match {

        case "spark" => println("spark")
        case "hadoop" => println("hadoop")
//        case 中实际上是偏函数
        case _ if data == "luo" => println("Luo") // 使用守卫
        case data_ if data_ == "carey" => println("carey") // 可以把值传入赋给新的变量  匹配的是if 后面的变量
        case _ => println("something else")


    }
  }

类型模式

  def exception(e : Exception): Unit ={
    e match {
        case fileEx : FileNotFoundException => println("file not fuond",fileEx) // 新定义的变量只是接受赋值 而她的类型才是重要的
        case _ : Exception => println("exception some what",e)

    }

}
```

匹配集合  序列化模式
```
  def match_collec(array : Any): Unit ={
    array match {
        case Array("scala") => println("scala arr")
        case Array("hello","scala","mm") => println("mm")
        case Array(one,two) => println(one,two)  // 对数组的元素的个数进行匹配 会将第一个值赋给one 第二个值赋给two  元组模式
        case Array("hello",_*) => println("array start with hello")  // 匹配开始为为hello的数组  使用_* 通配
        case List(_,"one","owo") => println("match list")  // 使用占位符
        case _ => println("something else")
    }
}
```


 案例类
构造器模式
```
//  case class  的参数会自动用 val修饰 编译器自动生成伴生对象  伴生对象的unapply() 方法 接受参数执行就生成 新实例
  class Person
  case class Worker(name:String,age:Int) extends Person
  case class Student(name:String,books:Int) extends Person

  def match_construct(p: Person): Unit ={
    p match {
      //构造器模式必须将Person类定义为case class,否则需要自己定义伴生对象并实现unapply方法。
        case Worker(name,age) => println("worker",name,age)
        case Student(name,books) => println(name,"have",books)
        case _ => println("unknown this ")
    }
  }
```



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 模式匹配 要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern...
    JasonDing阅读 5,177评论 0 1
  • 什么是匹配模式? 模式匹配并不很新,(上世纪)七十年代中期就已经有语言采用。据我所知,第一种语言是ML,但可能也有...
    安静1337阅读 5,486评论 0 51
  • 模式匹配是根据模式检查值的机制。一个成功的匹配可以将值分解成其组成部分。它Java switch语句的一个更强大的...
    steanxy阅读 3,701评论 0 0
  • 1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函...
    fengzhizi715阅读 8,646评论 0 5
  • 2013年1月13日,我在朋友圈发出自己的第一条消息。3年之后,我典型的一天中有这样的片段:早上起床前,我看一下微...
    锋哥聊人事阅读 2,773评论 0 0

友情链接更多精彩内容