zoukankan      html  css  js  c++  java
  • 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类型列表都可以与之匹配

    匹配数组

    匹配列表

    匹配元组

    匹配对象及样例类

    变量声明中的模式匹配

    for表达式中的模式匹配

    偏函数中的模式匹配

  • 相关阅读:
    在winform下实现左右布局多窗口界面的方法(一)
    C# 使用API检查域用户名和密码是否正确
    C#检查网络是否可以连接互联网
    总结:实体类和(XML或二进制)之间相互转(序列化和反序列化)
    XML和实体类之间相互转换(序列化和反序列化)
    C# XML反序列化与序列化举例:XmlSerializer
    XML文件与实体类的互相转换
    Message类的属性Msg所关联的消息ID
    C# Message 消息处理
    在.net中读写config文件的各种方法(自定义config节点)
  • 原文地址:https://www.cnblogs.com/Gazikel/p/15782016.html
Copyright © 2011-2022 走看看