大家好,又见面了,我是你们的朋友全栈君。
对值进行模式匹配
object valueTest{
def main(args: Array[String]): Unit = {
def Score(score:String): Unit ={
score match {
case "A"=>println("very good")
case "B"=>println("good")
case "C"=>println("just soso")
case other =>println("terrible") //默认是_,也可以用其他的变量名
}
}
Score("D")
}
}
在模式匹配中使用if守卫:在case后的条件里面再加一个if条件
object valueTest{
def main(args: Array[String]): Unit = {
def Score(name:String,score:String): Unit ={
score match {
case "A"=>println("very good")
case "B"=>println("good")
case "C"=>println("just soso")
case _ if name=="James"=>print(s"come on !!! $name") //if守卫
case _ =>println("terrible")
}
}
Score("James","F")
}
}
在模式匹配中进行变量赋值:如果模式匹配的默认情况为一个变量名xx,则就会将要匹配的值A赋值给这个变量xx,可以在后面的处理语句中使用该值
object valueTest{
def main(args: Array[String]): Unit = {
def Score(name:String,score:String): Unit ={
score match {
case "A"=>println("very good")
case "B"=>println("good")
case "C"=>println("just soso")
case _ if name=="James"=>print(s"come on !!! $name")
case other =>println("terrible, you just "+other) //变量赋值
}
}
Score("Jamues","F")
}
}
基本语法:变量A match {case 变量: 类型 => 代码}
//变量Excep的数据类型是模式匹配中类型excipn的父类
object ExceptionTest{
def main(args: Array[String]): Unit = {
import java.io._
def funException(Excep: Exception) {
Excep match {
case excip1: IllegalArgumentException => println(excip1)
case excip2: FileNotFoundException => println( excip2)
case excip3: IOException => println( excip3)
case _: Exception => println("............" )
}
}
funException(new IOException("..."))
}
}
object ArrayTest{
def main(args: Array[String]): Unit = {
def playBall(arr: Array[Any]) {
arr match {
case Array("basketball") => println("play basketball") //匹配一个元素
case Array(ball1,(ball2,ball3)) => println("一个单个元素,一个二元组") //匹配特定结构
case Array("ball", _*) => println("ball start ") //匹配以ball开头
case _ => println("hey, who are you?")
}
}
playBall(Array("ball"))
}
}
变量person是case中匹配对象的父类
class Person
case class Teacher(name: String, subject: String) extends Person
case class Student(name: String, classroom: String) extends Person
object MatchTest {
def main(args: Array[String]): Unit = {
def judgeIndentity(person: Person): Unit = {
person match {
case Teacher(name, subject) => println(s"name = $name, subject = $subject")
case Student(name, classroom) => println(s"name = $name, classroom = $classroom")
case _ => println("........................")
}
judgeIndentity(Student("xz", "1001"))
}
}
}
Option[T]用在模式匹配中用来判断变量是否有值(对有值和无值做不同的处理)
object OptionTest{
def main(args: Array[String]): Unit = {
val person = Map(("Tom",15),("Wiki",26))
val age: Option[Int] = person.get("Toms")
age match {
case Some(grade) => println(s" is ${age.get} years")
case None => println("who are you")
}
}
}
object MatchTest {
def main(args: Array[String]): Unit = {
// 将列表中字母变成大写
val list = List((1, ("aa", 11)), (2, ("bb", 22)), (3, ("cc", 33)))
list.map(item => (item._1, (item._2._1.toUpperCase, item._2._2)))
// 模式匹配使代码更具有可读性
list.map{
case (id,(na,ages)) =>(id,(na.toUpperCase(),ages))
}
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166930.html原文链接:https://javaforall.cn