Scala进阶之路-Scala特征类与unapply反向抽取
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 */
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/9366723.html,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。