• 【Scala】代码实现Scala的各种模式匹配操作



    内容匹配

    import scala.util.Random
    
    object TestMatch {
      def main(args: Array[String]): Unit = {
        //创建一个Int数组
        val array = Array(12, 34, 56, 78)
        //随机生成数组中的元素并赋值给常量i
        val i = array(Random.nextInt(array.length))
        println(array.length)
    
        println(i)
        //模式匹配,匹配数组中的内容
        i match {
          case 12 => println("第一名")
          case 34 => println("第二名")
          case 56 => println("第三名")
          case 78 => println("第四名")
          case _ => throw new Exception("无匹配项")
        }
      }
    }
    

    类型匹配

    import scala.util.Random
    
    object TestMatch2 {
      def main(args: Array[String]): Unit = {
        //创建一个包含多种类型的数组
        val array = Array(11, 55, 88, "zhangsan", "lisi", "wangwu", 3.14, 7.77, true)
        //随机生成数组中的元素并赋值给常量value
        val value = array(Random.nextInt(array.length))
    
        println(value)
        //模式匹配,匹配类型
        value match {
          // case x : Int => println("元素类型是Int")
          case y: String => println("元素类型是String")
          case z: Double => println("元素类型是Double")
          case a: Boolean => println("元素类型是Boolean")
    
          case b: Int if (b > 20) => println("元素类型是Int且不是11") //if(b > 20)称为守卫条件,必须同时满足
          case _ => throw new Exception("无匹配项")
        }
      }
    }
    

    s表达式

    value match {
      // case x : Int => println("元素类型是Int")
      case y: String => println(s"提取的值为$y")
      case _ => throw new Exception("无匹配项")
    }
    //s表达式可以让""内的内容全部自动拼接
    //如上面,最后输出的结果应该是 提取的值为wangwu
    

    case class 样例类

    import scala.util.Random
    
    //样例类是专门用于模式匹配的特殊类,使用关键字case修饰
    
    // case class是普通的样例类,使用时按常理需要new一个对象
    case class Submit(taskName:String,taskNum:Int)  //需要构造参数列表
    
    // case object是特殊样例类,不需要new
    case object Holiday //case object 不需要参数列表
    
    object CaseClassTest {
      def main(args: Array[String]): Unit = {
        //remove 'new' modifier  case class会自动创建伴生对象,提供apply方法,所以一般情况下也不需要new
        val array = Array(Holiday, Submit("makeMoney", 888))
        val product = array(Random.nextInt(array.length))
    
        product match {
          case Holiday => println("放假啦")
          case Submit(taskName,taskNum) => println(s"taskName:$taskName,taskNum:$taskNum")
        }
      }
    }
    

    偏函数

    object PartialFunctionTest {
      //偏函数
      val func1: PartialFunction[String, Int] = {
        case "one" => 1
        case "two" => 2
        case "three" => 3
        case "four" => 4
        case _ => -1
      }
      //上下两种方法相同
      def func2(num: String): Int = num match {
        case "one" => 1
        case "two" => 2
        case _ => -1
      }
    
      def main(args: Array[String]): Unit = {
        println(func1("one"))
        println(func2("one"))
      }
    }
    
  • 相关阅读:
    Jedis与Redisson选型对比
    使用rdbtools工具来解析redis rdb文件
    Generating equals/hashCode implementation but without a call to superclass
    解决 Order By 将字符串类型的数字 或 字符串中含数字 按数字排序问题
    File.delete()和Files.delete(Path path)的区别
    file.deleteOnExit()与file.delete()的区别
    java日期中YYYY与yyyy的区别
    IDEA git分支回退指定的历史版本
    Lucene介绍与使用
    Lombok 学习指南
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772401.html
Copyright © 2020-2023  润新知