您好,登錄后才能下訂單哦!
object Test01 {
def main(args: Array[String]): Unit = {
val arr=Array("aa","bb","cc")
//隨機獲取數組的任意元素
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") //表示所有的都沒有匹配到執行這里
}
}
}
object Test01 {
def main(args: Array[String]): Unit = {
val arr=Array("aa",18,4.4,true)
//隨機獲取數組的任意元素
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") //表示所有的都沒有匹配到執行這里
}
}
}
object Test01 {
def main(args: Array[String]): Unit = {
//匹配數組
val arr3=Array(0,1,2,3,4,5)
arr3 match{
case Array(0,x,y) => println(x+"--"+y) //匹配以0開頭,后面兩個元素的數組
case Array(0) => println("only 0") //匹配只有一個元素的數組
case Array(0,_*) => println("many") //匹配以0開頭的數組,_表示任意元素,*表示一到多個元素
}
//匹配序列
val lst1=List(3,1,-1)
lst1 match{
case 0::Nil => println("only 0") //匹配只有一個元素0的序列
case x::y::Nil =>println(x+"--"+y) //匹配有兩個元素的序列
case 0::tail => println("0 is head ") //匹配以0開頭的序列
case _ => println("nothing ")
}
//匹配元組
val tuple=(2,3,4)
tuple match {
case (1,x,y) => println("1 is head ") //匹配以1開頭的 3個元素的tuple
case (_,x,y) => println("many") //匹配以任意開頭的 3個元素的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("程序結束!")
}
}
}
?
?在scala中樣例類是一種特殊的類,可用于模式匹配。
? 特點:
? ? - 構造器中的參數如果不被聲明為 var 的話,它默認的話是 val 類型的,但一般不推薦將構造器中的參數聲明為 var
? ? - 自動創建伴生對象,同時在里面給我們實現子 apply 方法,使得我們在使用的時候可以 不直接顯示地 new 對象
? ? - 伴生對象中同樣會幫我們實現 unapply 方法,從而可以將 case class 應用于模式匹配 apply 方法接受參數返回對象,unapply 方法接收對象返回參數
? ? - 實現自己的 toString、hashCode、copy、equals 方法
? ? - case class 主構造函數里面沒有修飾符,默認的是 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) //這里能將樣例類中的參數提取出來,是是因為有unapply方法
case HeartBeat(time) => println(time)
case CheckTimeOutTask => println("CheckTimeOutTask")
}
}
}
//多例樣例類
case class SubmitTask(id: String, name: String)
//多例樣例類
case class HeartBeat(time: Long)
//單例樣例類
case object CheckTimeOutTask
例2:
在 Scala 中 Option 類型樣例類用來表示可能存在或也可能不存在的值(Option 的子類有 Some 和 None)。Some 包裝了某個值,None 表示沒有值。
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")
}
/**
* 偏函數:
* 語法:func1:PartialFunction[input,output]
* input:表示輸入類型
* output:輸出的類型
*
*/
def func1:PartialFunction[String,Int]={
case "zs" =>18
case "ls"=>18
case "ww"=>20
case _ =>100
}
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。