52.Scala中路径依赖代码实战详解

来源:互联网 发布:sql数据库开发 编辑:程序博客网 时间:2024/04/29 13:45


class Outer{  //外部类 ,外部类不能访问内部类private级别的成员  private val x = 10  class Inner{    private val y = x + 10 //但是内部类可以访问外部类的私有成员。因为内部类隐含地持有外部类的实例。  }}object Path_Dependence_52 {  def main(args: Array[String]): Unit = {      val outer = new Outer        //inner或者inner2依赖于outer。outer是它的路径,在scala中,不同的路径代表了不同的类型。我们称之为对外部类的依赖为路径依赖类型(Path Dependence Type)      val inner = new outer.Inner      val inner2 : outer.Inner = new outer.Inner  //在Java中,所有的内部类是同一个类型,但是在scala中,scala的内部类必须依赖于Outer              val o1 = new Outer      val o2 = new Outer            val i : Outer#Inner = new o1.Inner   //o1.Inner是Outer#Inner的子类。外部类#内部类:类型投影(不同外部类实例,但内部类是同一类型)。                                           //虽有路径依赖,但还想用Java风格就用这种表达方式。      //val i : o2.Inner = new o1.Inner   //报错。type mismatch,found:o1.Inner,required:o2.Inner.生动地说明了o1.Inner和o2.Inner不是同样一个类型。                                  //因为路径依赖中o1和o2不是同样一个对象,导致路径不一样。       }}


例如:
有2个社交网络,facebook和twitter,有很多会员,是依赖于各自网络的。
就算是同一个人在这两个不同的社交网络里,也是不同的实例。

spark编程中,数据是分布式的,会分成很多的片,不同分片的数据从理论上讲是一样的(当然数据内容不同),也就是说,属于同样类型的数据,但是我们写代码时,处理数据时,还是处理属于每一个blog或split分片的结果。从这个角度看,也可看作是路径依赖。


参考资料来源于大数据梦工厂 深入浅出scala 第52讲 由王家林老师讲解



原创粉丝点击