1-标准形式
数据 match {
case 条件 => 输出
}
2-偏函数(先以show代替)
def show () = {
case 条件 => 输出
}
3-异同
Java中的switch-case只能匹配字符,枚举,int数值,字符串。
Scala中的match-case基本什么都可以匹配。
Java中的switch-case需要使用break,不然就会贯穿(从开始执行到结束不会关心case条件是否满足)。
scala中的match-case没有break,只要case满足就执行,执行完就自动退出,不会执行下一个case。
scala中使用_ 代替Java中的default,是最后的默认情况,一定要放到最后。
4.多种匹配方式
//匹配数据值
val arr = Array("aa", "bb", "cc", "dd")
arr(Random.nextInt(arr.length)) match {
case "aa" => println("one")
case "bb" => println("two")
case "cc" => {println("three")}
case "dd" => println("four")
case _ => println("默认")
}
//匹配数据类型
val arr2:Array[Any] = Array("string",1,3.8,7L,MatchCaseDemo)
arr2(Random.nextInt(arr2.length)) match {
case x:Int => println("int类型数值")
case y:Double if (y>0) => println("大于零的浮点数值")
case MatchCaseDemo => {println("中奖啦")}
case _ => println("结束啦")
}
//匹配以什么开头
val arr3 = Array(1,1,5,7,3)
arr3 match {
case Array(1,2,x,y) => println("有四个元素且前两一样时"+x+y)
case Array(1,1,5,_*) => println("_*代表后边所有值")
case _ => println("没有")
}
//元组匹配
val tup = (1,3,5)
tup match {
case (3,x,y) => println("匹配成功")
case (x,y,z) => println("只要三个元素就成功")
case (_,y,5) => println("尽量不要使用下划线")
}
5.样例类
主要是为了提供给模式匹配类,可以什么都不写,只是封装,也可以写入一些数据
分装数据使用:case class 类名(构造方法)
可以匹配方法:case object 类名
定义样例类,在类的外部,可以在其他文件中,需要使用 case + class或object
//定义样例类
case object Check
case class Submit(id:String,time:Long)
case class Cat(name:String,king:String){进行数据操作}
//使用样例类
val arr = Array(Check,Submit("001",1500))
arr(Random.nextInt(arr.length)) match {
case check => println("没有参数")
case Submit(id,task) => println("可以使用{}操作数据")
case _ => println()
}