Scala中的模式匹配

match case的语法如下
变量 match { case 值 = > 代码}
值匹配
1.scala中的模式匹配只会匹配到一个分支,不需要使用break语句
2.match是表达式,与if表达式一样是有值的
3.除了可以匹配常量,还可以匹配变量
4.支持模式守卫

val ch: Char = 'e'

ch match {
	case 'c' | 'C' => print ("这是c")
	//添加模式守卫
	case _ if ch>'c' => print ("这是其他的字符")
	//这是一个变量匹配
	case x => print (x)
}

特殊常量的匹配
import scala.math.E
val i=2.718281828459045
E match {
	case i=>println(i) //小写字母为变量模式
	case `i`=>println(i) //强制常量模式
	case _=>println("others") 
}

类型匹配
val arr = Array("hs", 1, 2.0, 'a')
arr.map{
	case x: Int => println(x) 
	case s: String => println(s.toUpperCase)
	case _: Double => println(Int.MaxValue)
	case _ => 0 
}

集合的匹配(数组,列表,元组)
val arr1 = Array(0,0,0)
val res = arr1 match {
	case Array(0) => "0" //匹配1个0的数组
	case Array(x, y) => s"$x $y" // 匹配任何带有两个元素的数组,并将元素绑定到x和y
	case Array(x,y,z) => "0" //匹配任何带有三个元素的数组
	case Array(0, _*) => "0..." //匹配任何以0开始的数组,数组的长度不限
	case _ => "something else"
}

上一篇:搜索和查询


下一篇:ElasticSearch 进阶 (高级查询)