Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
王家林亲授《DT大数据梦工厂》大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
土豆:http://www.tudou.com/programs/view/5uuKOP38d6s/
优酷:http://v.youku.com/v_show/id_XMTI4MzMzMjM3Ng==.html?from=s1.8-1-1.2
爱奇艺:http://www.iqiyi.com/w_19rrx5djod.html#vfrm=2-3-0-1
腾讯视频: http://v.qq.com/boke/page/q/0/a/q01598mqrna.html
技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群
DT大数据梦工厂① :462923555
DT大数据梦工厂②:437123764
DT大数据梦工厂③ :418110145
微信公众账号: DT_Spark
王家林老师微信号: 18610086859
王家林老师QQ: 1740415547
王家林老师邮箱: 18610086859@126.com
本视频由王家林老师, 亲自讲解, 完全通过代码实战把您带人大数据的时代.
package com.parllay.scala.type_parameterizitor /**
* Created by richard on 15-8-5.
* 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用
*/
object Singleton_Type {
/** scala> object A scala> A.getClass
res2: Class[_ <: A.type] = class A$ scala> typeOf[A.type]
res0: reflect.runtime.universe.Type = A.type
对于这种单例,它的类型与它的类不同,要用 A.type 来表示。 这有点怪,通常我们不会用它,比如下面的方式都多此一举: scala> val a : A.type = A scala> def foo() : A.type = A
一方面因为scala有类型推导的功能,另一方面,因为单例是唯一的,
A.type类型只有唯一的实例A(排除null),我需要的话直接用A就好了。 不过我们讨论的话题重点是 singleton type,想象一下A是一个对象实例,
是否对任何实例x都存在一个x.type这样的类型呢? scala> class A scala> val a = new A scala> typeOf[a.type]
res0: reflect.runtime.universe.Type = a.type
wow,真的存在。再用这个类型声明一个变量看看: scala> val x:a.type = a
x: a.type = A@6738694b
灵的,如果赋一个非a的实例呢? scala> val x:a.type = a2
<console>:13: error: type mismatch;
found : a2.type (with underlying type A)
required: a.type scala> typeOf[a.type] == typeOf[A] // a.type 与 A 不是同一个类型
res2: Boolean = false scala> typeOf[a.type] == typeOf[a2.type] // a.type 与 a2.type 也不同
res1: Boolean = false scala> typeOf[a.type] <:< typeOf[A] // a.type 是 A 类型的子类型
res5: Boolean = true
看到了,a.type 与 a2.type 是不同的类型!a.type也是单例类型,
它也只有唯一的实例: a (排除null) 所有的对象实例都有一个x.type的单例类型,它只对应当前对象实例。
这么做有什么意义呢? 从这里看到一种情况,在“链式”调用风格下,有适用的场景: class A {def method1: A = this }
class B extends A {def method2: B = this} val b = new B
b.method2.method1 // 可以工作
b.method1.method2 // 不行,提示:error: value method2 is not a member of A
有些人很喜欢用 x.foo.bar 这样的方式连续的去操作,这种风格也成为”链式调用”风格,
它要求方法返回的必须是当前对象类型,以便连贯的调用方法。不过上面,
因为父类中声明的method1方法返回类型限制死了就是A类型(不写返回值类型,用类型推导也一样),
导致子类对象调用完method1之后,类型已经变成了父类型,无法再调用子类型中的方法了。解决方法是: class A { def method1: this.type = this }
class B extends A { def method2 : this.type = this } val b = new B
b.method1.method2 // ok
把返回类型都改为了 this.type 单例类型,就灵了。它利用了this关键字的动态特性来实现的,
在执行b.method1 的时候,method1返回值类型this.type 被翻译成了B.this.type scala> b.method1
res0: b.type = B@ca5bdb6
这样不同的对象实例在执行该方法的时候,返回的类型也是不同的(都是当前实例的单例类型)。 小结,单例类型是个特殊的类型,单例类型绑定(依赖)在某个对象实例上,每个对象实例都有它的单例类型。不过它的场景并不多见。
*/
}
Scala 深入浅出实战经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark中应用的更多相关文章
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.spl ...
- Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第79讲:单例深入讲解及单例背后的链式表达式
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第78讲:Type与Class实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第77讲:模式匹配下的提取器动手构造实战
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Scala 深入浅出实战经典 第76讲:模式匹配下的赋值语句
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第75讲:模式匹配下的For循环
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- git 安装与配置
Git服务器搭建 1. 环境部署 系统环境:服务器端:CentOS 6.5 ,ip:192.168.56.100 Master 客户端:CentOS 6.5 ,ip:192.168.56.101 Sl ...
- winpcap usb山寨网卡识别
买了个沐阳的JP-1081 USB外置有线网卡 装上RD9700的驱动 WINPCAP 4.1.3 运行程序发现没有找到这个网卡 后来才发现 winpcap4.1之后 获取的网卡信息是该次随系统启动 ...
- C2第四次作业解题报告
看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...
- h5自动生成工具
一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...
- 无线安全专题01--kali破解WPA
最近一直用flask写自己的博客框架,等过段时间才能将其分享出来,所以在此期间决定开个无线安全的专题,分享一些无线安全方面的知识. 好了,废话不多说,咱们进入今天的主题,使用kali linux上的无 ...
- Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...
- 【Leetcode】【Medium】Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- [JS9] document's bgColor改变背景颜色
<HTML> <HEAD> <TITLE>设置背景颜色</TITLE> </HEAD> <BODY> <CENTER> ...
- CLIQUE 聚类算法以及Java实现+多线程
CLIQUE(Clustering In QUEst)是一种简单的基于网格的聚类方法,用于发现子空间中基于密度的簇.CLIQUE把每个维划分成不重叠的区间,从而把数据对象的整个嵌入空间划分成单元.它使 ...