您的位置:首页 > 其它

59.Scala中隐式转换初体验实战详解以及隐式转换在Spark中的应用源码解析

2017-10-03 22:49 274 查看
隐式转换的目的:增强类库功能

在spark或者play框架中,到处可见。

增强类库的方式:

在Java或者C#中,用工具类或者继承
在Scala中,用隐式转换或者隐式参数。

import java.io.File
import scala.io.Source

class RichFile(val file : File){  //RichFile是增强的类。比如1 to 3  1是Int,但是隐式转换成RichInt,RichInt里才有to()方法
def read = Source.fromFile(file.getPath()).mkString
}

object Context{
implicit def file2RichFile(file : File) = new RichFile(file)  //把已有类型转换成增强的类型。注意方法的命名file2RichFile 原来类型2转换后的类型
}

object Hello_Implicit_Conversions_59 {
def main(args: Array[String]): Unit = {
import Context.file2RichFile
println(new File("E:\\big.txt").read)  //File中没有read方法,编译器在报错之前会最后一次尝试检查,看看在其作用域里有无隐式转换。在这里就是在main()里查看
}
}


若当前作用域没有隐式转换,会找源目标类型的伴生对象。
比如在Spark中,SparkConetxt中若没有找到隐式转换,就会在RDD.scala中找,其中有很多方法,包括rddToPairFunction,rddToAsyncRDDActions,rddToSequenceFileRDDFunctions



隐式参数:

运用了隐式转换的技术,隐式参数一般发生在函数调用的时候,调用者会通过隐式参数告诉被调用的函数更多的关于类型和上下文的信息。

参考资料来源于大数据梦工厂 深入浅出scala 第59讲 由王家林老师讲解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐