资源描述:
《第4课Scala模式匹配类型系统彻底精通与Spark源码阅读》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、(文档来源:SparkIMF)获取更多大数据Spark相关资料,请关注公众微信号:DT^SparkScala模式匹配、类型系统彻底精通与Spark源码阅读一:守卫varch=chmatch{case*+*=>sign=1case,J=>sign=case_ifCharacter.isDigit(ch)=>digit=Character.digit(chz10)case_=>sign=0}二:模式中的变虽如果在case关键字后报着一个变疑名,那么匹配的表达式会被赋值给那个变疑。case一是这个特性的一个特殊悄况,变量名是一。"Hello,world"
2、foreach{c=>printin(cmatch{case'1=>"space"casech=>nChar:H+c})}三:类型模式相比使用islnstanceof來判断类型,便用模式匹配更好objmatch{casex:Int=>xcases:String=>Integer.parselnt(s)caseBiglnt=>Int.MaxValuecase_=>0}捕获异常:valfile=newFile(fileName)try{Source.fromFile(file).getLines()}catch{caseel:FileNotFoundE
3、xception=>println(,,FileNotFoundException,')casee2:RuntimeException二〉println(HRuntimeException”)casee3:Exception=>println(”Exception“)}因为兀配是发生在运行期的,而且JVM中泛熨的类熨信息会彼擦掉,因此不能使用类熨來匹配特定的Map类盘四:匹配数组.列表和元组1)数纽valarr=Array(0z3,4,5,67)arrmatch{caseArray(O)=>M0ucaseArray(x,y)=>x+HM+ycase
4、Array(O,x=>println(x)case_=>''somethingelse'12)列表valarr=List(0,4,5,6,7jarrmatch{caseList(O)=>M0ncaseList(x#y)=>x+11"+ycaseList(Ozx@J*)=>println(x)case_=>“somethingelse11}或考arrmatch{case0::Nil=>©casex::y::Nil=>x+,"1+ycase0::tail=>"0..."case_=>"somethingelse11}五:提取器模式匹配來对数组、列表和元
5、组进行了匹配,在这个过程的背后的是提取器(extractor)机制。使用unapply來提取固定数量的对彖,使用unapplySeq來提取一个序列。在前而的代码caseArray(O,x)Array©x)部分实际上是使用了伴生对彖中的提取器,实际调用形式是:Array.unapplySeq(arr)<>根据Doc,提取器方法接受一个Array参数,返回一个0ption。1〉正则表达式是另一个适用捉取器的场虽。正则冇分组时,可以用捉取器来匹配分组valpattern=M([0-9]+)([a-z]+)".r"99bottles"match{casep
6、attern(num,item)=>(num,item)}2)H定义捉取器;下面的例子显示电子邮件地址的提取器对彖:objectTest{defmain(args:Array(StringJ){printin("Applymethod:M+apply("Zara蔦"gmail.com,,));printin("Unapplymethod:H+unapply(,,Zara@gmail.comu));println(HUnapplymethod:M+unapply(MZaraAli”));}//Theinjectionmethod(optional)d
7、efapply(user:String,domain:String)={user+H@H+domain}//Theextractionmethod(mandatory)defunapplyfstr:String):Option[(String,String)]={valparts=strsplitl'@tlif(parts.length==2){Some(parts(0),parts(l))}else{None}}}六:变疑声明中的模式val(x,y)=(1,2)val(q,r)=Biglnt(lO)/%3//返回商和余数的对偶valArray(f
8、irst,second,_*)=arr//将第一・和第二个分别给first和second七:for表达式中的模式impor