Scala模式匹配——高阶用法

(一)scala的模式匹配

(1)常量

(2)变量

(3)构造器

(4)序列

(5)元组

(6)类型

(7)变量绑定

(二)Scala模式匹配的语法格式:

X match{

case1

case2

}

复制代码
package test7

import scala.io.StdIn

object test7_1 {
  //从控制台读入一个数字a,使用(StdiIn.readInt)
  //如果a>=0并且 a<= 3,打印[0 - 3]
  //如果 a>= 4 并且 a<=8,打印[4 - 8]
  //否则:打印未匹配
  def main(args: Array[String]): Unit = {
    val a = StdIn.readInt()//等待从键盘输入内容
    println(s"从键盘输入的数字是:$a")
    a match {
      case x if  x>= 0 && x<=3 => println(s"[0 - 3]")
    case y if y>= 4 && y<= 8 => println(s"[4 - 8]")
      case _ => println("其他")
    }
  }
}

package test7

import scala.io.StdIn

object test7_1 {
  //从控制台读入一个数字a,使用(StdiIn.readInt)
  //如果a>=0并且 a<= 3,打印[0 - 3]
  //如果 a>= 4 并且 a<=8,打印[4 - 8]
  //否则:打印未匹配
//  def main(args: Array[String]): Unit = {
//    val a = StdIn.readInt()//等待从键盘输入内容
//    println(s"从键盘输入的数字是:$a")
//    a match {
//      case x if  x>= 0 && x<=3 => println(s"[0 - 3]")
//    case y if y>= 4 && y<= 8 => println(s"[4 - 8]")
//      case _ => println("其他")
//    }
//  }
//  def main(args: Array[String]): Unit = {
//    for (i <- 2000 to 2040){
//      i match {
//        case year if year%4 == 0 && year%100 != 0 || year%400 == 0 =>println(s"${year}是闰年")
//        case _ =>  println(s"${i}不是闰年")
//
//      }
//    }
//  }
  // 1. 匹配类型
//  def main(args: Array[String]): Unit = {
//    val i:Int =  1
//    val b: Boolean = false
//
//    //Any任意的
//    //val x:Any = "abc"
    val x:Any = i
//
//    val x:Any = b
//    x match {
//      case _:Int => println(s"$x 是Int类型的") // _:Int 表示变量是Int类型
//      case _:Boolean=>println(s"$x 是Boolean类型的")
//      case _ => println("其他")
//
//    }
//  }

  // 2. 匹配数组

//  def main(args: Array[String]): Unit = {
//    var arr1 = Array(1,3,4)//三个元素,且第一个为一
//    var arr2 = Array(1,6,7)
//    var arr3 = Array(0,1,6,7,3)
//
//    var arr = Array(1)
//    arr match {
//      case Array(0) => println("1个元素,且第一个为0")
//      case Array(1,x,y) => println(s"三个元素,且第一个为一,第二个为${x},第三个为${y}")
//      case Array(1, _*) => println("n个元素,且第一个为1")
//      case _ => println("其他")
//    }
//  }

  // 3. 匹配case class
//  def main(args: Array[String]): Unit = {
//  case class Stu(name:String)
//  case class Teacher(name:String,subject:String)
//  val s1 = Stu("小花")
//  val t1 = Teacher("小明","体育")
//
//  val x:Any = t1
//
//  x match {
//    case Stu(a) => println(s"学生${a}")
//    //属性的个数对应上
//    case Teacher(a,b) => println(s"${b}老师 ${a}")
//    case _ => println("其他")
//  }
//}
  //定义变量赋值
//def main(args: Array[String]): Unit = {
//  var arr = Array(1,2,3,4,7)
//  //任务:定义三个变量,分别保存数组中的第一个,第二个,第三个
  var x = arr(0)
  var y = arr(1)
  var z = arr(2)
//  //先要匹配上,然后赋值
//  var Array(x,y,_,z,_*) = arr
//  println(s"x = $x , y = $y , z = $z")
//}
  
}
相关推荐
苏打水com4 分钟前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
csbysj202035 分钟前
如何使用 XML Schema
开发语言
R6bandito_40 分钟前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
earthzhang20211 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
杨枝甘露小码1 小时前
Python学习之基础篇
开发语言·python
间彧1 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧1 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧1 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧1 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧1 小时前
Spring Cloud Gateway详解与应用实战
后端