Scala中的模式匹配和case class

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoushuilin/article/details/81035250
什么叫模式匹配?大家知道Java中的Switch语句么?
我记得之前的课程里面,我讲了模式匹配比Java中的switch语句要厉害.
那我们首先来了解一下什么是模式匹配,然后再根据例子来看一下厉害在什么地方


一般情况下,根据给定条件去匹配一个东西,这种可以称之为模式匹配,这个概念不一定是教科书般的标准的,是我自己说的。
但是意思是这个意思. 你们能理解就行.


来怎么来看模式匹配呢?
for(i<- 1 to 10){
    i  match {
      case i%2==0 => println("i的值为偶数:" +i)
      case i%3==0 => println("i的值为3的倍数:" + i)
      case _ => println("其他值")
    }
  }
  
  //可以判断
  for(i<- 1 to 10){
      i  match {
        case 1 => println(1)
        case 5 => println(5)
        case 8 => println(8)
        //增加守卫条件
        case _ if(i%2==0)=> println(i+":能被2整除")
        case _ if(i%3==0)=> println(i+":能被3整除")
        case _ =>
      }
  
  
var list=new ArrayBuffer[Int]()
  var x=0
  for(i<- 1 to 10){
    i  match {
      //后面可以跟表达式
      case 1 => x=1
      case 5 => println(5)
      case 8 => println(8)
      case _ if(i%4==0)=> list.append(i)
      case _ if(i%3==0)=> println(i+":能被3整除")
      case _ =>
    }
  }
  println(x)
  
那我们接下来讲一下case class
我们之前学了class, 其实case class也是class, 但是比class更加的简洁。
我们一般称之为样式类




/**
  * Created by ZHOUSHUILIN140 on 2018/7/12.
  */


object SetTest {


  def main(args: Array[String]): Unit = {
    //可以不用new , 会自动的调用apply方法
      val s1:Person = Student("张三",19 , "男")
    s1 match {
        case Student(name , age , sex) =>println("这是一个学生")
        case Teacher(name , age , sex)=> println("这是一个老师")
        case _ =>
    }
    s1.eat()
  }


}




abstract class Person{
  val name:String="李四"
  def eat():Unit ={
    println(name + "在吃饭")
  }


  def run()
}




case class Student(override val name:String,age:Int,Sex:String) extends Person{
  override def run(): Unit = {
    println("Run")
  }
}




case class Teacher(override val name:String,age:Int,Sex:String) extends Person{
  override def run(): Unit = {
    println("Run")
  }
}


那case class其实除了这种模式匹配的功能之外,其实本质上就是一个class,非常的便捷,以后我们会经常用到,
这个case class其实就可以当做一个普通的class来应用

猜你喜欢

转载自blog.csdn.net/zhoushuilin/article/details/81035250
今日推荐