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反向抽取的更多相关文章

  1. Scala进阶之路-Scala中的枚举用法案例展示

    Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ...

  2. Scala进阶之路-Scala中的高级类型

    Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...

  3. Scala进阶之路-Scala中的Ordered--Ordering

    Scala进阶之路-Scala中的Ordered--Ordering 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   说道对象的比较,在Java中大家最熟悉不过的就是实现类本身实 ...

  4. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  5. Scala进阶之路-Scala中的泛型介绍

    Scala进阶之路-Scala中的泛型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 通俗的讲,比如需要定义一个函数,函数的参数可以接受任意类型.我们不可能一一列举所有的参数类 ...

  6. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  7. Scala进阶之路-Scala的基本语法

    Scala进阶之路-Scala的基本语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数式编程初体验Spark-Shell之WordCount var arr=Array( ...

  8. Scala进阶之路-反射(reflect)技术详解

    Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ...

  9. Scala进阶之路-Spark底层通信小案例

    Scala进阶之路-Spark底层通信小案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark Master和worker通信过程简介 1>.Worker会向ma ...

随机推荐

  1. Selenium-ActionChainsApi接口详解

    ActionChains 有时候我们在通过Selenium做UI自动化的时候,明明能够在DOM树内看到这个元素,但是我在通过driver click.sendkey的时候,就是点击不到或无法输入字符串 ...

  2. HTML 中使 footer 始终处于页面底部

    通常在页面中,需要使页脚 footer 部分始终处于底部.当页面高度不够 100% 时, footer 处于页面最底部,当页面内容高于 100% 时,页脚元素可以被撑到最底部. 方法一:绝对定位 &l ...

  3. 页面添加友盟(CNZZ)统计和事件追踪

    1. 在页面中引入友盟(CNZZ)统计的 JS 代码 <script type="text/javascript"> // 统计 var cnzz_protocol = ...

  4. app.use( )做一个静态资源服务

    var express = require("express"); var app = express(); //静态服务 app.use("/jingtai" ...

  5. ElasticSearch入门 第四篇:使用C#添加和更新文档

    这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  6. 架构师修炼 II - 表达思维与驾驭方法论

    开篇之前我想先说说当年开发的那点事儿:大约10年前吧,我还是一个程序员的时候经常都是遇到这样的项目开发流程: 解决方案 :满足客户目的和投标用的一堆文档(不少还是互联网上抄的) ,是以Word为主的纯 ...

  7. 软件工程第二次作业(One who wants to wear the crown, Bears the crown.)

    小镓自述Eclipse使用及自动单元测试技术 因为本人对JAVA有一些兴趣,所以就决定用Eclipse来完成这次作业,从安装Eclipse到学习写代码,最后学会用Junit来进行单元测试.这段过程给我 ...

  8. Js_实现3D球体旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 【Unity Shader】从NDC(归一化的设备坐标)坐标转换到世界坐标的数学原理

    从NDC(归一化的设备坐标)坐标转换到世界坐标要点 参考资料 How to go from device coordinates back to worldspace http://feepingcr ...

  10. Web挂马方式整理

    一:框架挂马 <iframe src=地址 width=0 height=0></iframe> 二:js文件挂马 首先将以下代码 document.write("& ...