scala的模式匹配

scala的模式匹配

	package com.meng.nan.day715

	import scala.util.Random

	//模式匹配
	object PatternMatching extends  App {

	  val array=Array("xaioming","xiaohua","xiaohei")
	  val name=array(Random.nextInt(array.length))

	  name match {
		case "xiaoming"=>println("小明")
		case  "xiaohua"=>println("小华")
		case  "xiaohei"=>println("小黑")
		case _=>print("??????")

	  }}

当一个类被声名为 case class 的时候,scala 会帮助我们做下面几件事情:
1、构造器中的参数如果不被声明为 var 的话,它默认的话是 val 类型的,但一般不推荐将
构造器中的参数声明为 var
2、自动创建伴生对象,同时在里面给我们实现子 apply 方法,使得我们在使用的时候可以
不直接显示地 new 对象
3、伴生对象中同样会帮我们实现 unapply 方法,从而可以将 case class 应用于模式匹配
apply 方法接受参数返回对象,unapply 方法接收对象返回参数
4、实现自己的 toString、hashCode、copy、equals 方法
5、case class 主构造函数里面没有修饰符,默认的是 val

	package com.meng.nan.day715

	import scala.util.Random

	//样例类
	object ExampleClass extends  App {
	//case class 是多例的,后面要跟构造参数,case object 是单例的
	  var arr=Array(CheckTimeOutTask,HearBeat(123),SumbitTask("0001","task"))
	//模式匹配
	  arr(Random.nextInt(arr.length)) match {
		case  SumbitTask(id,name)=>{
		  println(s"$id,$name")
	  }
		case  HearBeat(time)=>{
		  println(time)
		}
		case  CheckTimeOutTask=>{
		  println("check")
		}

	  }
	}
	//样例类
	//不加够造方法
	case  object CheckTimeOutTask
	//加够造方法
	case class HearBeat(time:Long)
	case class SumbitTask(id:String,name:String)
	
	object样例类
	
	package com.meng.nan.day715

	object ObjectClass {
	  def main(args: Array[String]): Unit = {
		//object样例类
		/**
		  * 在 Scala 中 Option 类型样例类用来表示可能存在或也可能不存在的值(Option 的子类有 Some
		  * 和 None)。Some 包装了某个值,None 表示没有值
		  */

		val map=Map("a"->1,"b"->2)
		val v=map.get("b") match {
		  case Some(i)=>i
		  case  None=>0
		}
		println(v)
	//有返回值,没有返回默认值
		val v1=map.getOrElse("c",0)
		println(v1)
	  }
	}
	
	偏函数
	
	被包在花括号内没有 match 的一组 case 语句是一个偏函数,它是 PartialFunction[A, B]的一
	个实例,A 代表参数类型,B 代表返回值类型,常用作输入模式匹配
	package com.mazh.scala.day2.oop

	object PartialFuncDemo {
	//偏函数
	def func1: PartialFunction[String, Int] = {
	case "one" => 1
	case "two" => 2
	case _ => -1 }
	//普通函数的模式匹配实现
	def func2(num: String) : Int = num match {
	case "one" => 1
	case "two" => 2
	case _ => -1 }
	def main(args: Array[String]) {
	println(func1("one"))
	println(func2("one"))
	} }
	总结:
	偏函数,就是用来做模式匹配的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值