資源描述:
《scala基礎(chǔ)(二)-java開發(fā)java經(jīng)驗技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Scala慕礎(chǔ)(二)-Java開發(fā)Java經(jīng)驗技巧Scala基礎(chǔ)(二)木文作者:ImportNew?朱偉杰未經(jīng)許可,禁止轉(zhuǎn)載!這個章節(jié)的內(nèi)容包括?apply?對象?函數(shù)即對彖?包?模式匹配?caseclasstry-catch-finallyapply方法當一個類或者對象有一個主要的用途的時候,apply方法可以提供一種很好的語法糖(syntacticsugar)□scala>classFoo{}definedclassFooscala>objectFooMaker{defapply0=newFoo
2、I}definedmoduleFooMakerscala>valnewFoo二FooMaker()newFoo:Foo=Foo@5b83f762或者scala>classBar{defapply()二0I}definedclassBarscala>valbar=newBarbar:Bar=Bar@47711479scala>bar()res8:Int=0這樣來看實例對象,好像我們是在調(diào)用一個方法。后面會詳細介紹這個!對象對象都是用來保持一個類的單個實例。經(jīng)常在工廠里用到。objectTimer{va
3、rcount=0defcurrentCount():Long={count+二1count}}怎么去使用scala>Timer,currentCount()resO:Long二1類和對象可以重名。這樣的對象被稱為"伴隨對象(CompanionObject)。我們一般在工廠里使用伴隨對象。這里有個簡單的示例,它的作用是使得創(chuàng)建對象實例的吋候不需要用'neW。classBar(foo:String)objectBar{defapply(foo:String)=newBar(foo)}函數(shù)即對象在Scal
4、a里,我們經(jīng)常討論對象-函數(shù)編程。它表示什么呢?函數(shù)究竟是什么?函數(shù)是一系列的traitc確切地說,有一個參數(shù)的函數(shù)是Functionltrait的一個實例。這個trait定義了我們之前學(xué)到的apply()的語法糖,它允許你像調(diào)用函數(shù)一樣調(diào)用對象。scala>objectaddOncextendsFunctionl[Int,Int]{defapply(m:Int):Int=m+1definedmoduleaddOnescala>addOne(1)res2:Tnt二2在Scala里有Functionl
5、到22。為什么是22?這是一個任意的魔數(shù)。我從來沒有遇到需要22個參數(shù)的函數(shù),所以這個數(shù)字還是很有效的。apply的語法糖使得對彖和函數(shù)的編程能夠組合在一起。你可以把對彖作為參數(shù)進行傳遞,同吋也可以把它們當作函數(shù)使用,而實際上函數(shù)也只不過是類的實例。那這樣是不是意味著每次你在類里定義一個方法,那么你就會得到Function的-個實例呢?不,類里的方法僅僅是普通的方法。在repl里單獨定義的方法才是Function的實例。類也可以繼承函數(shù),然后這些類的實例就可以通過()來調(diào)用。scala>classA
6、ddOneextendsFunctionl[Int,Int]{defapply(m:Int):Int=m+1I}definedclassAddOnescala>valplusOne=newAddOne()plusOne:AddOne二scala>plusOne(1)resO:Int二2extendsFunctionl[Int,Int]的一種比較好的簡寫是extends(Int=>Int)classAddOneextends(Tnt=>Int){defapply(m:Int):Int=m+1包你可以通
7、過包來組織你的代碼。packagecom.twitter,example在一個文件的頂部聲明包,那么這個文件里的所冇的東西都是在這個包里。值和函數(shù)不能在類和對象外而。對象對丁組織靜態(tài)函數(shù)是很冇用的。packagecom.twitter,exampleobjectcolorHolder{valBLUE二"Blue"valRED二〃Red〃}現(xiàn)在你可以直接訪問里面的成員printin(,zthecoloris:"+com.twitter,example.colorHolder.BLUE)當你在scala
8、repl里定義這個對象11寸,它會提示什么:scala>objectcolorHolder{IvalBlue="Blue"valRed="Red"I}definedmodulecolorHolder上面的信息暗示你scala的設(shè)計者把對象設(shè)計成為Scala的模塊系統(tǒng)的一部分。模式匹配Scala中最有用的一個功能。對值進行匹配valtimes二1timesmatch{case1=>onecase2=>case_二〉"someothernumber77}"受保護的匹配ti