博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala进阶之路-Scala特征类与unapply反向抽取
阅读量:6705 次
发布时间:2019-06-25

本文共 1971 字,大约阅读时间需要 6 分钟。

          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 + "/" + bot19     }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             None35         } 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和b45         val a = Fraction.apply(10,100)46         val b = Fraction(2,3)47 48         //调用a的“*”的方法49         val c = a.*(b)          //当然,你也可以这样写 : val c = a * b50         println(c)51 52         //通过unapply方法将对象c中存储的值给抽取出来,分别复制给x和y53         val Fraction(x,y) = c54         println("分子 : "+x +" 分母 : " + y)55 56     }57 }58 59 60 /*61 以上代码执行结果如下 :62 20/30063 分子 : 20 分母 : 30064  */

 

转载于:https://www.cnblogs.com/yinzhengjie/p/9366723.html

你可能感兴趣的文章
人工智能将会是百度推广的下一个制胜点么?
查看>>
Nginx配置性能优化之worker配置
查看>>
直播与安全,如何保护隐私
查看>>
微软三月修补64个安全漏洞 其中两个遭黑客开采
查看>>
Junit 测试断言说明
查看>>
二叉树的中序遍历
查看>>
PHP获取当前位置
查看>>
C#可选参数与具名参数
查看>>
CSS-文本(中,英)
查看>>
socketServer模块
查看>>
Raid 技术简介
查看>>
Day2----Python学习之路笔记(2)
查看>>
在mac os x 下升级emacs
查看>>
HDU2010 水仙花数【进制+趣味程序】
查看>>
1593: [Usaco2008 Feb]Hotel 旅馆
查看>>
dubbo的本地存根(Stub)
查看>>
转://Linux下误删除/home目录的恢复方法
查看>>
HDFS详解
查看>>
2-Add Two Numbers
查看>>
ORACLE学习-3.多表查询
查看>>