-
match case 中的 if 这种分支会成对出现,增加可读性
- 1、case 是必须带值的;如果匹配不成功,又没有 case _,程序会报错
- 2、case _,必须写在最后。
-
(1) 匹配字面量的值
-
(2) 匹配变量
-
(3) 匹配常量值
object class5 {
def main(args: Array[String]): Unit = {
testType(1)
testType(1.1)
testType("1")
}
def testType(i:Any):Unit = {
i match {
case x:Int =>println("当前变量是:Int")
case x:Double => println("当前变量是:Double")
case _ => println("未知")
}
}
}
object class6 {
def main(args: Array[String]): Unit = {
testType(Array(1,2,3))
testType(Array(1,2,3,4))
testType(Array(11,2,3,4))
testType(Array(1,1,3,4))
}
def testType(arr:Any):Unit = {
arr match {
case Array(1,x,y) => println("arr是一个数组,有三个元素,第一个是1")
case Array(1,x,y,z) => println("arr是一个数组,有四个元素,第一个是1")
case Array(x,1,y,z) => println("arr是一个数组,有四个元素,第二个是1")
case _ => println("未知")
}
}
}
object class7 {
// 定义一个样例类: 圆形。它有一个属性:半径
case class Circle(radius:Double)
// 定义一个样例类: 矩形。它有两个属性:长和宽
case class Rectangle(width:Double, height:Double)
// 定义一个方法,用来求圆形、矩形的面积
def getArea(obj:Any):Unit = {
obj match {
case Circle(radius) => println("圆形的面积是:" + radius * radius * 3.14)
case Rectangle(width, height) => println("矩形的面积是:" + width * height)
case _ => println("未知")
}
}
def main(args: Array[String]): Unit = {
getArea(Circle(2))
getArea(Rectangle(2,3))
getArea("abc")
}
}
object class8 {
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
// 定义三个变量, 分别将最初始值为arr的前三个元素的值?
var a = arr(0)
var b = arr(1)
var c = arr(2)
println("a = " + a + " b = " + b + " c = " + c)
// 使用模式匹配, 将arr的前三个元素分别赋值给a,b,c
val Array(x,y,z,_*) = arr
// _* 表示将剩余的部分放在这儿
println("x = " + x + " y = " + y + " z = " + z)
}
}