【Scala】代码实现Scala的各种模式匹配操作


内容匹配

import scala.util.Random

object TestMatch {
  def main(args: Array[String]): Unit = {
    //创建一个Int数组
    val array = Array(12, 34, 56, 78)
    //随机生成数组中的元素并赋值给常量i
    val i = array(Random.nextInt(array.length))
    println(array.length)

    println(i)
    //模式匹配,匹配数组中的内容
    i match {
      case 12 => println("第一名")
      case 34 => println("第二名")
      case 56 => println("第三名")
      case 78 => println("第四名")
      case _ => throw new Exception("无匹配项")
    }
  }
}

类型匹配

import scala.util.Random

object TestMatch2 {
  def main(args: Array[String]): Unit = {
    //创建一个包含多种类型的数组
    val array = Array(11, 55, 88, "zhangsan", "lisi", "wangwu", 3.14, 7.77, true)
    //随机生成数组中的元素并赋值给常量value
    val value = array(Random.nextInt(array.length))

    println(value)
    //模式匹配,匹配类型
    value match {
      // case x : Int => println("元素类型是Int")
      case y: String => println("元素类型是String")
      case z: Double => println("元素类型是Double")
      case a: Boolean => println("元素类型是Boolean")

      case b: Int if (b > 20) => println("元素类型是Int且不是11") //if(b > 20)称为守卫条件,必须同时满足
      case _ => throw new Exception("无匹配项")
    }
  }
}

s表达式

value match {
  // case x : Int => println("元素类型是Int")
  case y: String => println(s"提取的值为$y")
  case _ => throw new Exception("无匹配项")
}
//s表达式可以让""内的内容全部自动拼接
//如上面,最后输出的结果应该是 提取的值为wangwu

case class 样例类

import scala.util.Random

//样例类是专门用于模式匹配的特殊类,使用关键字case修饰

// case class是普通的样例类,使用时按常理需要new一个对象
case class Submit(taskName:String,taskNum:Int)  //需要构造参数列表

// case object是特殊样例类,不需要new
case object Holiday //case object 不需要参数列表

object CaseClassTest {
  def main(args: Array[String]): Unit = {
    //remove 'new' modifier  case class会自动创建伴生对象,提供apply方法,所以一般情况下也不需要new
    val array = Array(Holiday, Submit("makeMoney", 888))
    val product = array(Random.nextInt(array.length))

    product match {
      case Holiday => println("放假啦")
      case Submit(taskName,taskNum) => println(s"taskName:$taskName,taskNum:$taskNum")
    }
  }
}

偏函数

object PartialFunctionTest {
  //偏函数
  val func1: PartialFunction[String, Int] = {
    case "one" => 1
    case "two" => 2
    case "three" => 3
    case "four" => 4
    case _ => -1
  }
  //上下两种方法相同
  def func2(num: String): Int = num match {
    case "one" => 1
    case "two" => 2
    case _ => -1
  }

  def main(args: Array[String]): Unit = {
    println(func1("one"))
    println(func2("one"))
  }
}
posted @ 2020-04-10 19:48  _codeRookie  阅读(541)  评论(0编辑  收藏  举报