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  */

 

posted @ 2018-07-25 16:35  尹正杰  阅读(1250)  评论(0编辑  收藏  举报