0
点赞
收藏
分享

微信扫一扫

scala自学之路-30-模式匹配

编程练习生J 2022-03-11 阅读 127

类似java switch

常量模式匹配

变量模式匹配

通配符模式匹配

object PatternDemo {

def main(args: Array[String]): Unit = {

//常量模式匹配

// 常量字面值的匹配

val site = "baidu.com"

site match {

case "baidu.com" => println("success")

///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行

case _ => println("fail")

}

//常量变量的匹配

val site2 = "baidu.com"

val baidu = "baidu.com"

val baidu2 = "baidu.com2"

val BAIDU = "baidu.com"

val BAIDU2 = "baidu.com2"

site2 match {

case BAIDU => println("success")

///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行

case _ => println("fail")

}

site2 match {

//大写的是常量,无法赋值,直接匹配

case BAIDU2 => println("success")

///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行

case _ => println("fail")

}

site2 match {

//把小写的当成常量了,直接赋值了

case baidu => println("success")

///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行

case _ => println("fail")

}

site2 match {

case baidu2 => println(baidu2 + "success")

///下划线相当于java中的default,不可以缺少,不需要break,一旦匹配就不会继续运行

case _ => println("fail")

}

println(baidu2)

//通配符模式的匹配

val list = List(1, 2, 4)

list match {

case List(_, _, 3) => println("success")

case _ => println("fail")

}

}

}

样例类匹配

//做一个信息的识别

abstract class Notificatition

//定义不同信息的样例类

case class Email(sender: String, title: String, body: String) extends Notificatition

case class SMS(caller: String, msg: String) extends Notificatition

case class VoiceRecording(contactName: String, link: String) extends Notificatition

object PatternDemo2 {

def showNotificatition(notificatition: Notificatition): String = {

notificatition match {

case Email(sender, title, body) => "收到邮件" + sender

case SMS(caller, msg) => "收到SMS" + caller

case VoiceRecording(contactName, link) => "收到录音" + contactName

case _ => "获取到垃圾信息"

}

}

def main(args: Array[String]): Unit = {

val email = Email("zhangsan", "lisi", "hhhh")

val email2 = Email("lisi", "lisi", "hhhh")

println(showNotificatition(email))

println(showNotificatition(email2))

}

}

类型匹配

import scala.util.Random

//做一个信息的识别

abstract class Notificatition

//定义不同信息的样例类

case class Email(sender: String, title: String, body: String) extends Notificatition

case class SMS(caller: String, msg: String) extends Notificatition

case class VoiceRecording(contactName: String, link: String) extends Notificatition

object PatternDemo2 {

def showNotificatition(notificatition: Notificatition): String = {

notificatition match {

case Email(sender, title, body) => "收到邮件" + sender

case SMS(caller, msg) => "收到SMS" + caller

case VoiceRecording(contactName, link) => "收到录音" + contactName

case _ => "获取到垃圾信息"

}

}

def main(args: Array[String]): Unit = {

val email = Email("zhangsan", "lisi", "hhhh")

val email2 = Email("lisi", "lisi", "hhhh")

println(showNotificatition(email))

println(showNotificatition(email2))

//类型匹配

val arr = Array("s", 1, 'c')

val obj = arr(Random.nextInt(3))

println(obj)

obj match {

case x: Int => println(x)

case s: String => println(s.toUpperCase)

case c: Char => println(c)

case _ => println("fail")

}

}

}

举报

相关推荐

0 条评论