如果所有的case都不匹配,那么执行case_分支,类似于Java中的default
如果所有的case都不匹配,又没有case_分支,则抛出MatchError
每个case都不用break,自动中断case
match中可以使用其他类型,如表达式
=>后面的代码块到下一个case,作为一个整体执行,可以用{}括起来
package chapter04 //如果所有的case都不匹配,那么执行case_分支,类似于Java中的default //如果所有的case都不匹配,又没有case_分支,则抛出MatchError //每个case都不用break,自动中断case //match中可以使用其他类型,如表达式 //=>后面的代码块到下一个case,作为一个整体执行,可以用{}括起来 object test01 { def main(args:Array[String]):Unit={ var oper="#" var n1=20 var n2=10 var res=0 oper match{ case "+" => res = n1 + n2 case "-" => res= n1 - n2 case _ => println("oper error") } println(res) //0 } }
package chapter04 object test02 { def main(args:Array[String]):Unit={ //字符串匹配 for(ch <- "+-3!"){ var sigh = 0 var digit = 0 ch match{ case ‘+‘ => sigh = 1 case ‘-‘ => sigh = -1 case ‘-‘ => sigh = -5 //重复只看第一个匹配的规则 case _ if ch.toString.equals("3") =>digit = 3 case _ => sigh = 2 //case_放在最后 } println(ch +" "+sigh+" "+digit) } } }
package chapter04 object test03 { def main(args:Array[String]):Unit={ val ch = ‘V‘ ch match{ case ‘+‘ => println("ok") case mychar => println("ok "+ mychar) case _ => println("no") } } }
package chapter04 object test04 { def main(args:Array[String]):Unit={ //类型匹配 //类型匹配时泛型不起作用 val a =8 val obj= if(a==1) 1 else if (a==2) "2" else if (a==3) BigInt(3) else if (a==4) Map("aa"->1) else if (a==5) Map(1->"aa") else if (a==6) Array(1,2,3) else if (a==7) Array("aa",1) else if (a==8) Array("aa") val result= obj match{ case a:Int =>a //1 case b:Map[String,Int]=>"字符串-数字的Map" //4 case c:Map[Int,String] =>"数字-字符串的Map" //5 case d:Array[String]=>"字符串数组" //8 case e:Array[Int]=>"数字数组" //6 case f:BigInt=>Int.MaxValue //3 case _=>"no" //2 7 } println(result) } }
package chapter04 object test05 { def main(args:Array[String]):Unit={ //数组匹配 for(arr<- Array(Array(0),Array(1,0),Array(0,1,0),Array(1,1,0))){ val result=arr match{ case Array(0)=>"0" case Array(x,y)=> x+" "+y case Array(0,_*)=>"以0开头" case _ =>"no" } println(result) } //列表匹配 for(list<- Array(List(0),List(1,0),List(0,1,0),List(1,1,0))){ val result=list match{ case 0::Nil=>"0" case x::y::Nil => x+""+y case 0::tail=>"0..." case _ =>"no" } println(result) } //元组匹配 for (pair<-Array((0,1),(1,0),(2,1),(1,0,2))){ val result=pair match{ case (0,_) =>"0...." case (y,0)=>y case (a,b)=>(b,a) case _ =>"no" } println(result) } } }
package chapter04 object test06 { def main(args:Array[String]):Unit={ //对象匹配 //case中的对象unapply方法(对象提取器),返回Some集合则为匹配成功,返回None,则匹配失败 object Square{ def unapply(z:Double):Option[Double]=Some(math.sqrt(z)) def apply(z:Double):Double=z*z } val number:Double=36.0 number match{ case Square(n)=>println(n) case _=>"no" } } }
package chapter04 object test07 { def main(args:Array[String]):Unit={ val (username,age,email)=("zhangshan",18,"123.com") println(username) println(age) println(email) var (q,r)= BigInt(10)/%3 println(q) println(r) val list=List(("a",1),("b",2),("c",3)) for ((k,v) <- list) { println(k+"" +v) } } }
package chapter04 object test08 { def main(args:Array[String]):Unit={ //样例类 case class val dollar = new Dollar(1.0) println(dollar.value) //不需要new关键字 val dollar2 = Dollar(2.0) println(dollar2.value) for(amt<-Array(Dollar(1000.0),Currency(1000.0,"RMB"),NoAmount)){ val result = amt match { case Dollar(v) => v case Currency(v, u) => v + " " + u case NoAmount => "NO" } println(amt+" "+result) } } } abstract sealed class Amount case class Dollar (value:Double) extends Amount //默认为val case class Currency(var value:Double,unit:String) extends Amount case object NoAmount extends Amount
原文:https://www.cnblogs.com/hapyygril/p/13500606.html