Scala(三)常用功能

1.模式匹配和样例类

1)模式匹配

Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,来替代switch case,match case也被称为模式匹配

match case的语法如下:
变量 match { case 值 => 代码 }
如果值为下划线“_”,则代表了不满足以上所有情况下的默认情况如何处理。
此外,match case中,只要一个case分支满足并处理了,就不会继续判断下一个case分支了。(与Java不同,java的switch case需要用break阻止)

(1)样例类匹配

样例类是一种特殊的类,可用于模式匹配,case class是多例的,后面要跟构造参数,case object是单例的。
带守卫的模式,增加布尔表达式或者条件表达式使得匹配更具体

//定义样例类
abstract class Notification
case class Email(sender:String,title:String)extends Notification
case class SMS(caller:String,message:String)extends Notification
case class VoiceRecording(contactName:String,link:String)extends Notification
//基于样例类的模式匹配
object CaseClassDemo2 {
  def showNotification(notification: Notification)={
    notification match {
      case Email(sender,title) => s"$sender+ '---' + $title"
      case SMS(caller,msg) => s"you get an $msg from $caller"
      case VoiceRecording(name,link) => s"you get info from $name"
      case _ =>println("other message")
    }
  }

  def main(args: Array[String]): Unit = {
    val email = Email("kate","email info")
    println(showNotification(email))
  }
}

(2)类型匹配

Scala的模式匹配一个强大之处就在于,可以直接匹配类型,而不是值
注意: 当你在匹配类型的时候,必须给出一个变量名,否则你将会拿对象本身来进行匹配

val arr = Array("hs", 1, 2.0, 'a')
val obj = arr(Random.nextInt(4))
println(obj)
obj match {
	case x: Int => println(x)
	case s: String => println(s.toUpperCase)
	case _: Double => println(Int.MaxValue)
	case _ => 0
}

(3)匹配字符串

/**
* 模式匹配-字符串
*/
object MatchString {
def main(args: Array[String]): Unit = {
	val arr = Array("zhoudongyu", "yangzi", "guanxiaotong", "zhengshuang")
	val name = arr(Random.nextInt(arr.length))
	println(name)
	name match {
		case "zhoudongyu" => println("周冬雨")
		case "yangzi" => println("杨紫")
		case "guanxiaotong" => println("关晓彤")
		case "zhengshuang" => println("郑爽")
		case _ => println("Nothing ...")
		}
	}
}

(4)数组匹配

object ArrayMatch {
  //数组匹配
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2)
    val res = arr match {
        //匹配数组中只有某个元素:元素0
      case Array(0) =>"0"
        //匹配任何一个含有两个元素的数组,并将元素绑定到x和y
      case Array(x,y) =>s"$x,$y"
        //匹配第一个元素是0 的数组
      case Array(0,_*) =>"0......."
        //匹配不上时
      case _ =>"no match"
    }
    println(res)
  }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值