scala 模式匹配

作者: 苟雨 | 来源:发表于2017-07-21 22:49 被阅读1次

    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 ")
        }
      }
    ```
    
    
    
    

    相关文章

      网友评论

        本文标题:scala 模式匹配

        本文链接:https://www.haomeiwen.com/subject/mloekxtx.html