• 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  */
  • 相关阅读:
    myeclipse中代码不显示SVN版本号
    java HttpURLConnection 登录网站 完整代码
    新浪微博自动(模拟)登陆详解及实现
    java模拟Cookies登陆
    paper 53 :深度学习(转载)
    paper 52 :windows7环境下theano安装
    paper 51:图像复原
    paper 50 :人脸识别简史与近期进展
    paper 49:论文退稿?审稿人帮你总结了22个能避免的常见问题
    paper 48: Latex中如何制作参考文献
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/9366723.html
Copyright © 2020-2023  润新知