您好,登錄后才能下訂單哦!
object Test01 {
def main(args: Array[String]): Unit = {
val arr=Array("aa","bb","cc")
//隨機(jī)獲取數(shù)組的任意元素
val index=Random.nextInt(3)
val value=arr(index)
//模式匹配
value match{
case "aa" => println("0")
case "bb" => println("1")
case "cc" => println("2")
case _ => println("null") //表示所有的都沒(méi)有匹配到執(zhí)行這里
}
}
}
object Test01 {
def main(args: Array[String]): Unit = {
val arr=Array("aa",18,4.4,true)
//隨機(jī)獲取數(shù)組的任意元素
val index=Random.nextInt(arr.length)
val value=arr(index)
//模式匹配
value match{
case x:Int if(x>3) => println("Int")
case y:String => println("String")
case z:Double => println("Double")
case flag:Boolean => println("Boolean")
case _ => println("null") //表示所有的都沒(méi)有匹配到執(zhí)行這里
}
}
}
object Test01 {
def main(args: Array[String]): Unit = {
//匹配數(shù)組
val arr3=Array(0,1,2,3,4,5)
arr3 match{
case Array(0,x,y) => println(x+"--"+y) //匹配以0開(kāi)頭,后面兩個(gè)元素的數(shù)組
case Array(0) => println("only 0") //匹配只有一個(gè)元素的數(shù)組
case Array(0,_*) => println("many") //匹配以0開(kāi)頭的數(shù)組,_表示任意元素,*表示一到多個(gè)元素
}
//匹配序列
val lst1=List(3,1,-1)
lst1 match{
case 0::Nil => println("only 0") //匹配只有一個(gè)元素0的序列
case x::y::Nil =>println(x+"--"+y) //匹配有兩個(gè)元素的序列
case 0::tail => println("0 is head ") //匹配以0開(kāi)頭的序列
case _ => println("nothing ")
}
//匹配元組
val tuple=(2,3,4)
tuple match {
case (1,x,y) => println("1 is head ") //匹配以1開(kāi)頭的 3個(gè)元素的tuple
case (_,x,y) => println("many") //匹配以任意開(kāi)頭的 3個(gè)元素的tuple
case _ => println("nothing ")
}
}
}
object Test01 {
def main(args: Array[String]): Unit = {
try{
println(3/0)
}catch {
case e:IOException => println("IOException")
case e:Exception => println("Exception")
}finally{
println("程序結(jié)束!")
}
}
}
?
?在scala中樣例類(lèi)是一種特殊的類(lèi),可用于模式匹配。
? 特點(diǎn):
? ? - 構(gòu)造器中的參數(shù)如果不被聲明為 var 的話(huà),它默認(rèn)的話(huà)是 val 類(lèi)型的,但一般不推薦將構(gòu)造器中的參數(shù)聲明為 var
? ? - 自動(dòng)創(chuàng)建伴生對(duì)象,同時(shí)在里面給我們實(shí)現(xiàn)子 apply 方法,使得我們?cè)谑褂玫臅r(shí)候可以 不直接顯示地 new 對(duì)象
? ? - 伴生對(duì)象中同樣會(huì)幫我們實(shí)現(xiàn) unapply 方法,從而可以將 case class 應(yīng)用于模式匹配 apply 方法接受參數(shù)返回對(duì)象,unapply 方法接收對(duì)象返回參數(shù)
? ? - 實(shí)現(xiàn)自己的 toString、hashCode、copy、equals 方法
? ? - case class 主構(gòu)造函數(shù)里面沒(méi)有修飾符,默認(rèn)的是 val
例1:
object Test01 {
def main(args: Array[String]): Unit = {
val arr=Array(SubmitTask("1001","zs"),
HeartBeat(10000),CheckTimeOutTask)
arr(Random.nextInt(arr.length)) match {
case SubmitTask(id,name) => println(id,name) //這里能將樣例類(lèi)中的參數(shù)提取出來(lái),是是因?yàn)橛衭napply方法
case HeartBeat(time) => println(time)
case CheckTimeOutTask => println("CheckTimeOutTask")
}
}
}
//多例樣例類(lèi)
case class SubmitTask(id: String, name: String)
//多例樣例類(lèi)
case class HeartBeat(time: Long)
//單例樣例類(lèi)
case object CheckTimeOutTask
例2:
在 Scala 中 Option 類(lèi)型樣例類(lèi)用來(lái)表示可能存在或也可能不存在的值(Option 的子類(lèi)有 Some 和 None)。Some 包裝了某個(gè)值,None 表示沒(méi)有值。
object Test01 {
def main(args: Array[String]): Unit = {
val map=Map("name"->"zs","age"->18,"address"->"beijing")
val value=map.get("name")
val result=value match {
case Some(i) => i
case None => 0
}
println(result)
//上述方法可以用map的方法替代
map.getOrElse("name",0)
}
}
?
object Test01 {
def main(args: Array[String]): Unit = {
//普通方式的模式匹配
val value = "aa"
value match {
case "aa" => println("0")
case "bb" => println("1")
case "aa" => println("0")
}
/**
* 偏函數(shù):
* 語(yǔ)法:func1:PartialFunction[input,output]
* input:表示輸入類(lèi)型
* output:輸出的類(lèi)型
*
*/
def func1:PartialFunction[String,Int]={
case "zs" =>18
case "ls"=>18
case "ww"=>20
case _ =>100
}
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。