模式匹配

普通匹配

匹配常量玩徊;類型;模式守衛(wèi)

    x match{
      case "a" => println("11")
      case a:String if a!=null&&a=="b"=>println(s"$a  +String")
      case b:String  =>{
         println("hhh")
      }
      //若無默認值谨究,拋出MatchError異常
      case _ => println("default")
    }

匹配數(shù)組

for (arr<-Array(
      Array(0),
      Array(0,1),
      Array(1,2,1),
      Array(1,2,3,4),
      Array(1,3.5,"2",'c')))
    {
      val result = arr match{
        case Array(0)=>"0"
        case Array(x,y)=>x+"   "+y
        case Array(_,2,_)=>"..."
        case Array(_*)=>"all"
        case _=>"_"
      }
      println(result)
    }

匹配列表

方式二(方式一與匹配數(shù)組相同)

    val list:List[Int] = List(1,2,3,4,5)
    list match {
      case first::second::rest=>println(first+"--"+second+"--"+rest)
      case _=>println("_")
    }

匹配元組

    for (tuple<-Array((0,1),(1,2),(2,3),(3,4),(4,5,6))){
      val result = tuple match {
        case (0,_)=>"..."
        case (x,2)=>"x,2."
        case (x,y)=>"x,y"
          case(x,5,_)=>x+"  "+5
      }
      println(result)
    }

元組特殊匹配

1)在變量聲明時匹配

    val List(first,second,_*) = List(1,2,3,4,5)
    val (x,y) = (1,2)
    val fir::sec::rest = List(23,15,9,78)

2)for循環(huán)使用

   val list = List((1,2),(3,4),(5,6))
    for ((x,y)<-list){
      println(x,y)
    }

匹配對象及樣例類

概念

1)若只提取對象的一個屬性恩袱,則提取器為 unapply(obj:Obj):Option[T]
2)若提取對象的多個屬性,則提取器為 unapply(obj:Obj):Option[(T1,T2,T3…)]
3)若提取對象的可變個屬性胶哲,則提取器為 unapplySeq(obj:Obj):Option[Seq[T]]

2.樣例類仍然是類畔塔,和普通類相比,只是其自動生成了伴生對象鸯屿,并且伴生對象中
自動提供了一些常用的方法澈吨,如 apply、 unapply寄摆、 toString缔刹、 equals圆凰、 hashCode 和 copy杆融。
3.樣例類是為模式匹配而優(yōu)化的類畅涂,因為其默認提供了 unapply 方法,因此勾邦,樣例
類可以直接使用模式匹配蚣录,而無需自己實現(xiàn) unapply 方法。
4.構(gòu)造器中的每一個參數(shù)都成為 val眷篇,除非它被顯式地聲明為 var(不建議這樣做)

1)不使用樣例類

class ydtsnm(val name: String,val id:Int)
object ydtsnm {
  def apply(name:String,id:Int): ydtsnm = new ydtsnm(name,id)

  def unapply(stu: ydtsnm): Option[(String, Int)] = {
    if (stu==null)None
    else Some(stu.name,stu.id)
  }
}
object test{

  val result = ydtsnm("aaa",1) match {
    case ydtsnm("aaa",1)=>"yes"
    case _=>"no"
  }
}

2)使用樣例類

case class ydtsnm(val name: String,val id:Int)
object test{

  val result = ydtsnm("aaa",1) match {
    case ydtsnm("aaa",1)=>"yes"
    case _=>"no"
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萎河,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌公壤,老刑警劉巖换可,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椎椰,死亡現(xiàn)場離奇詭異厦幅,居然都是意外死亡,警方通過查閱死者的電腦和手機慨飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門确憨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓤的,你說我怎么就攤上這事休弃。” “怎么了圈膏?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵塔猾,是天一觀的道長。 經(jīng)常有香客問我稽坤,道長丈甸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任尿褪,我火速辦了婚禮睦擂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杖玲。我一直安慰自己顿仇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布摆马。 她就那樣靜靜地躺著臼闻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪囤采。 梳的紋絲不亂的頭發(fā)上些阅,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音斑唬,去河邊找鬼市埋。 笑死,一個胖子當(dāng)著我的面吹牛恕刘,可吹牛的內(nèi)容都是我干的缤谎。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼褐着,長吁一口氣:“原來是場噩夢啊……” “哼坷澡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起含蓉,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤频敛,失蹤者是張志新(化名)和其女友劉穎项郊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斟赚,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡着降,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拗军。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片任洞。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖发侵,靈堂內(nèi)的尸體忽然破棺而出交掏,到底是詐尸還是另有隱情,我是刑警寧澤刃鳄,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布盅弛,位于F島的核電站,受9級特大地震影響叔锐,放射性物質(zhì)發(fā)生泄漏挪鹏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一掌腰、第九天 我趴在偏房一處隱蔽的房頂上張望狰住。 院中可真熱鬧,春花似錦齿梁、人聲如沸催植。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽创南。三九已至,卻和暖如春省核,著一層夾襖步出監(jiān)牢的瞬間稿辙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工气忠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邻储,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓旧噪,卻偏偏與公主長得像吨娜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淘钟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容