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

类似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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值