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反向抽取
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.scalaClass class Fraction(var top:Int , var bot :Int) {
//定义一个方法,方面名称叫"*"
def *(f1:Fraction) = {
//调用单例模式中的apply方法
Fraction.apply(this.top * f1.top , this.bot * f1.bot)
} //重写toString方法
override def toString: String = {
top + "/" + bot
}
} object Fraction{
//定义静态方法,如果不指定默认会调用该方法
def apply(a:Int , b:Int)= {
//通过构造方法初始化“class Fraction”对象
new Fraction(a, b)
} //反向抽取
def unapply(f:Fraction):Option[Tuple2[Int,Int]] = {
//如果分母为0就返回Option的None实现类
if(f.bot == 0) {
None
} else {
//如果分母不为0就返回Option的Some实现类
Some(new Tuple2[Int,Int](f.top,f.bot))
}
}
} object app{
def main(args: Array[String]): Unit = {
//生产两个“class Fraction”对象a和b
val a = Fraction.apply(10,100)
val b = Fraction(2,3) //调用a的“*”的方法
val c = a.*(b) //当然,你也可以这样写 : val c = a * b
println(c) //通过unapply方法将对象c中存储的值给抽取出来,分别复制给x和y
val Fraction(x,y) = c
println("分子 : "+x +" 分母 : " + y) }
} /*
以上代码执行结果如下 :
20/300
分子 : 20 分母 : 300
*/
Scala进阶之路-Scala特征类与unapply反向抽取的更多相关文章
- Scala进阶之路-Scala中的枚举用法案例展示
		Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ... 
- Scala进阶之路-Scala中的高级类型
		Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ... 
- Scala进阶之路-Scala中的Ordered--Ordering
		Scala进阶之路-Scala中的Ordered--Ordering 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说道对象的比较,在Java中大家最熟悉不过的就是实现类本身实 ... 
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
		Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ... 
- Scala进阶之路-Scala中的泛型介绍
		Scala进阶之路-Scala中的泛型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 通俗的讲,比如需要定义一个函数,函数的参数可以接受任意类型.我们不可能一一列举所有的参数类 ... 
- Scala进阶之路-Scala函数篇详解
		Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ... 
- Scala进阶之路-Scala的基本语法
		Scala进阶之路-Scala的基本语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数式编程初体验Spark-Shell之WordCount var arr=Array( ... 
- Scala进阶之路-反射(reflect)技术详解
		Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ... 
- Scala进阶之路-Spark底层通信小案例
		Scala进阶之路-Spark底层通信小案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark Master和worker通信过程简介 1>.Worker会向ma ... 
随机推荐
- Java英文单词Java基础常见英语词汇
			Java英文单词Java基础常见英语词汇(共70个) ... 
- HTML-JS 循环 函数 递归
			[循环结构的执行步骤] 1.声明循环变量 2.判断循环条件 3.执行循环体操作 4.更新循环变量 然后,循环执行2-4,直到条件不成立时,跳出循环. while循环()中的表达式,运算结果可以是各种类 ... 
- React半科普文
			React半科普文 什么是React getting started 文件分离 Server端编译 定义一个组件 使用property 组件嵌套 组件更新 Virtual DOM react nati ... 
- C#_委托
			委托属于C#中的新名词,它的应用也非常广泛,例如事件就是委托最简单而又直接的例子. 那么首先说说什么是委托,其实委托在用过C或者C++的人看来就是函数指针,不过使用C#的大多数人都没有用过这两门语言, ... 
- Js_封装JQ库为插件
			//在jQuery匿名函数中,采用jQuery.extend();方法创建jQuery插件 //在jQuery匿名函数中, 采用对象.属性 = 函数的方式创建jQuery插件 (function ($ ... 
- Kaggle:  Google Analytics Customer Revenue Prediction EDA
			前言 内容提要 本文为Kaggle竞赛 Google Analytics Customer Revenue Prediction 的探索性分析 题目要求根据历史顾客访问GStore的数据,预测其中部分 ... 
- 服装盘点机PDA在服装行业颜色尺码仓库条码高效管理应用
			服装行业的商品管理的特点是需要管理颜色和尺码 具体逻辑就是: 什么商品,什么颜色,什么尺码,入库多少个? 什么商品,什么颜色,什么尺码,出库多少个? 什么商品,什么颜色,什么尺码,还有库存多少个? 如 ... 
- 树莓派Raspberry Pi微改款,Model B 3+规格探析
			18年3月树莓派基金会推出了ModelB 3+版的新款树莓派单板计算机.从编号数字上看,3+仅是3的再提升,在规格上有小幅异动,究竟改进或提升了哪些部分,本文将对此进行探讨. 树莓派版本观察 从过往的 ... 
- 2017中国人工智能公司榜单发布,颠覆AT的AI独角兽全在这
			每年12月,创业邦研究中心评选并报道“中国创新成长企业100强”,这个榜单我们已经连续做了8年,是中国最有潜力的创业新贵榜,受到了业内广泛认可.从2015年开始我们发现,人工智能上榜企业明显增多,20 ... 
- Vue 和 angular
			vue适合移动端的项目,而angular更适合运用于Pc端的项目. 
