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


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讲 由王家林老师讲解



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值