ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Scala模式匹配

2022-01-09 20:01:59  阅读:216  来源: 互联网

标签:case 匹配 Scala 模式匹配 println match


模式匹配

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类型列表都可以与之匹配

匹配数组

匹配列表

匹配元组

匹配对象及样例类

变量声明中的模式匹配

for表达式中的模式匹配

偏函数中的模式匹配

标签:case,匹配,Scala,模式匹配,println,match
来源: https://www.cnblogs.com/Gazikel/p/15782016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有