Scala進階之路-Scala特征類與unapply反向抽取
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
一.Scala特征類分析
1>.Unit
答:用於定義返回值類型,它的值只有一個,即"()",它有點類似於Java的void,只不過Java的返回值沒有變現形式。
2>.null
答 :一般多用於Scala語法賦值時默認的空值,比如:“var blog:String = _”,那么變量中blog的值就為null。
3>.Nothing
答:Nothing是Scala語言中所有類的子類,它是沒有具體的值的,比如:Nil = List[Nothing]
4>.Option
答:其有兩個實現子類,即None和Some兩個繼承類,None表示不存在,可以給任何數據類型賦值,經查看null的源碼case object None extends Option[Nothing],
二.apply快速構造對向與unapply反向抽取
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.scalaClass 7 8 9 class Fraction(var top:Int , var bot :Int) { 10 //定義一個方法,方面名稱叫"*" 11 def *(f1:Fraction) = { 12 //調用單例模式中的apply方法 13 Fraction.apply(this.top * f1.top , this.bot * f1.bot) 14 } 15 16 //重寫toString方法 17 override def toString: String = { 18 top + "/" + bot 19 } 20 } 21 22 23 object Fraction{ 24 //定義靜態方法,如果不指定默認會調用該方法 25 def apply(a:Int , b:Int)= { 26 //通過構造方法初始化“class Fraction”對象 27 new Fraction(a, b) 28 } 29 30 //反向抽取 31 def unapply(f:Fraction):Option[Tuple2[Int,Int]] = { 32 //如果分母為0就返回Option的None實現類 33 if(f.bot == 0) { 34 None 35 } else { 36 //如果分母不為0就返回Option的Some實現類 37 Some(new Tuple2[Int,Int](f.top,f.bot)) 38 } 39 } 40 } 41 42 object app{ 43 def main(args: Array[String]): Unit = { 44 //生產兩個“class Fraction”對象a和b 45 val a = Fraction.apply(10,100) 46 val b = Fraction(2,3) 47 48 //調用a的“*”的方法 49 val c = a.*(b) //當然,你也可以這樣寫 : val c = a * b 50 println(c) 51 52 //通過unapply方法將對象c中存儲的值給抽取出來,分別復制給x和y 53 val Fraction(x,y) = c 54 println("分子 : "+x +" 分母 : " + y) 55 56 } 57 } 58 59 60 /* 61 以上代碼執行結果如下 : 62 20/300 63 分子 : 20 分母 : 300 64 */