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")
//}
  
}
相关推荐
why15137 分钟前
腾讯(QQ浏览器)后端开发
开发语言·后端·golang
charade31241 分钟前
【C语言】内存分配的理解
c语言·开发语言·c++
浪裡遊41 分钟前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
LinDaiuuj42 分钟前
判断符号??,?. ,! ,!! ,|| ,&&,?: 意思以及举例
开发语言·前端·javascript
声声codeGrandMaster1 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
呼Lu噜1 小时前
WPF-遵循MVVM框架创建图表的显示【保姆级】
前端·后端·wpf
bing_1581 小时前
为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
spring boot·后端·微服务
小臭希1 小时前
Java——琐碎知识点一
java·开发语言
学c真好玩2 小时前
Django创建的应用目录详细解释以及如何操作数据库自动创建表
后端·python·django
Asthenia04122 小时前
GenericObjectPool——重用你的对象
后端