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 {case12=>println("第一名")case34=>println("第二名")case56=>println("第三名")case78=>println("第四名")case _ =>thrownewException("无匹配项")}}}
类型匹配
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 _ =>thrownewException("无匹配项")}}}
s表达式
value match {// case x : Int => println("元素类型是Int")case y: String =>println(s"提取的值为$y")case _ =>thrownewException("无匹配项")}//s表达式可以让""内的内容全部自动拼接//如上面,最后输出的结果应该是 提取的值为wangwu
case class 样例类
import scala.util.Random
//样例类是专门用于模式匹配的特殊类,使用关键字case修饰// case class是普通的样例类,使用时按常理需要new一个对象caseclassSubmit(taskName:String,taskNum:Int)//需要构造参数列表// case object是特殊样例类,不需要newcase 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("放假啦")caseSubmit(taskName,taskNum)=>println(s"taskName:$taskName,taskNum:$taskNum")}}}
偏函数
object PartialFunctionTest {//偏函数
val func1: PartialFunction[String, Int]={case"one"=>1case"two"=>2case"three"=>3case"four"=>4case _ =>-1}//上下两种方法相同
def func2(num: String): Int = num match {case"one"=>1case"two"=>2case _ =>-1}
def main(args: Array[String]): Unit ={println(func1("one"))println(func2("one"))}}