第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
2015-09-08 21:25
489 查看
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码:
sc.textFile("hdfs://......").flatMap(_.split(" ")).map(_,1).reduceByKey(_ + _)........
这种风格的编程方法叫做链式调用,它的实现方法见下面的代码:
class Animal {def breathe : this.type = this}
class Cat extends Animal {def eat: this.type = this}
object test51{
def main(args:Array[String]){
val cat = new Cat
cat.breathe.eat
}
}
在如上代码中,我们可以看到,我们的cat实例调用了breathe方法后,又调用了eat方法。
如果我们将Animal类和Cat类进行一些变化,如下面所示:
class Animal {def breathe = this}
class Cat extends Animal {def eat = this}
object test51{
def main(args:Array[String]){
val cat = new Cat
cat.breathe.eat
}
}
这样一来,当我们调用cat.breathe.eat时,编译器就会报错
看来,问题的关键就在于方法定义时的this.type = this这里了
应用这种写法,我们就可以在类实例化以后,进行链式的调用方法,进行方法的调用了。
分享下更多的scala资源吧:
百度云盘:http://pan.baidu.com/s/1gd7133t
微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416
360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)
信息来源于 DT大数据梦工厂微信公众账号:DT_Spark
关注微信账号,获取更多关于scala学习内容
sc.textFile("hdfs://......").flatMap(_.split(" ")).map(_,1).reduceByKey(_ + _)........
这种风格的编程方法叫做链式调用,它的实现方法见下面的代码:
class Animal {def breathe : this.type = this}
class Cat extends Animal {def eat: this.type = this}
object test51{
def main(args:Array[String]){
val cat = new Cat
cat.breathe.eat
}
}
在如上代码中,我们可以看到,我们的cat实例调用了breathe方法后,又调用了eat方法。
如果我们将Animal类和Cat类进行一些变化,如下面所示:
class Animal {def breathe = this}
class Cat extends Animal {def eat = this}
object test51{
def main(args:Array[String]){
val cat = new Cat
cat.breathe.eat
}
}
这样一来,当我们调用cat.breathe.eat时,编译器就会报错
看来,问题的关键就在于方法定义时的this.type = this这里了
应用这种写法,我们就可以在类实例化以后,进行链式的调用方法,进行方法的调用了。
分享下更多的scala资源吧:
百度云盘:http://pan.baidu.com/s/1gd7133t
微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416
360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)
信息来源于 DT大数据梦工厂微信公众账号:DT_Spark
关注微信账号,获取更多关于scala学习内容
相关文章推荐
- django 1.8 官方文档翻译: 2-5-7 自定义查找
- 搜索到的Github
- Spring part 3:AOP中的代理
- mongo如何查看性能 debug
- java中的任务调度
- IIS对Asp.Net WebForm和Asp.Net Mvc的处理通用部分
- 【深入ASP.NET原理系列】--ASP.NET请求管道对Asp.Net WebForm和Asp.Net Mvc的处理通用部分
- 心形代码
- JAVA中快捷键的使用
- Struts2.x和Struts1.x的区别
- org.osgi.framework.BundleException: Could not find bundle: org.eclipse.equinox.console错误解决办法
- cassandra cpp driver 2.1 阅读摘要
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
- 解决vsftpd的530/227/500错误
- spring4-2-bean配置-7-Spring表达式语言SpEL
- Java基础——I/O处理
- 单例模式中为什么用枚举更好
- java反射机制 以及通过反射获得类的变量字段,方法,构造函数
- Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)
- Eclipse unable to execute dex:GC overhead limit exceeded