Scala模式匹配
模式匹配
Scala中的模式匹配类似于Java中的switch语法。
但是Scala从语法中补充了更多的功能,所以更加强大
基本语法
模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。如果所有case都不匹配,那么会执行case_分支,类似于Java 中default语句。
package chapter08
object Test01_PatternMatchBase {
def main(args: Array[String]): Unit = {
// 基本定义语法
val x: Int = 2
val y:String = x match {
case 1 => "one"
case 2 => "two"
case 3 => "three"
case _ => "zero"
}
println(y)
// 实例:用模式匹配实现简单的二元运算
val a=25
val b=13
def matchDualOp(op: Char): Any = op match {
case '+' => a+b
case '-' => a-b
case '*' => a*b
case '/' => a/b
case _ => "非法运算符"
}
println(matchDualOp('+'))
println(matchDualOp('*'))
println(matchDualOp(';'))
}
}
- 如果所有case都不匹配,那么会执行case _ 分支,类似于Java中的default语句。若此时没有case _ 分支,那么会抛出MatchError
- 每个case中,不需要使用break语句,自动中断case
- match case 语句可以匹配任何类型,而不只是字面量(常量)
=>
后面的代码块,直到下一个case语句之前的代码是作为一个整体执行,可以使用{}
括起来,也可以不括。
模式守卫
如果想要匹配某个范围的数据,就需要在模式匹配中增加条件守卫。
package chapter08
object Test01_PatternMatchBase {
def main(args: Array[String]): Unit = {
// 模式守卫
// 求一个整数的绝对值
def abs(num: Int): Int = {
num match {
case i if i >= 0 => i
case i if i < 0 => -i
}
}
}
}
模式匹配类型
匹配常量
Scala中,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等。
匹配类型
List存在泛型擦除,不管case List的泛型是什么,定义的任何List类型列表都可以与之匹配
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战