今天学习了self type的内容,让我们来看下代码

package scala.learn

class Self{
  self =>
    val tmp = "Scala"
    def foo = self.tmp + this.tmp
}

trait S1
class S2 {this:S1 =>}
class S3 extends S2 with S1

trait T {this:S1 =>}

object S4 extends T with S1
object test94 {
  def main(args:Array[String]){
    class Outer { outer =>
      val v1 = "Spark"
      class Inner {
        println(outer.v1)
      }     
    }
    val c =new S2 with S1
   
   
  }
}

首先,定义了一个类Self,在Self类里面,用self定义了this指针的别名(this就是该类的运行时实例),所以可以用self.tmp访问内部成员。

如在main方法中的Outer类,我们定义了该类的this指针的别名为outer,所以在内部类Inner里,我们可以使用outer.v1,即this.v1.

另一个用法是,比如,我们先定义一个特质S1,再定义一个类S2,但是S2中,我们通过this:S1的方式,定义S2必须混入S1的类型。

这样一来,S2就混入了S1.当有其他类继承自S2时,我们就必须这样定义了:class S3 extends S2 with S1.

分享下更多的scala资源吧:

百度云盘:http://pan.baidu.com/s/1gd7133t

微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416

360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)

信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

关注微信账号,获取更多关于scala学习内容

第56讲:Scala中Self Types实战详解的更多相关文章

  1. Scala 深入浅出实战经典 第58讲:Scala中Abstract Types实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  2. 第58讲:Scala中Abstract Types实战详解

    这一讲我们来学习下抽像类型.让我们看下代码 package scala.learnimport scala.io.BufferedSourceimport scala.io.Source trait ...

  3. Scala 深入浅出实战经典 第57讲:Scala中Dependency Injection实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. Scala 深入浅出实战经典 第55讲:Scala中Infix Type实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  5. Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  6. Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. 第57讲:Scala中Dependency Injection实战详解

    本讲我们来学习下依赖注入.让我们从代码出发: package scala.learn trait Logger {def log (msg:String)}trait Auth {  auth:Log ...

  8. 第55讲:Scala中Infix Type实战详解

    今天学习了Infix type的知识,来看看实战代码: def main(args:Array[String]){    object log { def >>:(data:String) ...

  9. 第54讲:Scala中复合类型实战详解

    今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...

随机推荐

  1. POJ2553

    题意:很难懂!但是大体意思就是求有向图中从一个节点出发到达的点也能反向到达该节点的点.如a能到{b1,b2.....bx}这些点,而这些点也能到a,则a为要求的点.题目是求出所有的这种点. 对图进行缩 ...

  2. python之socket 网络编程

    提到网络通信不得不复习下osi七层模型: 七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互 ...

  3. Java基础知识系列——文件操作

    对文件进行操作在编程中比较少用,但是我最近有一个任务需要用到对文件操作. 对文件有如下操作形式: 1.创建新的文件(夹) File fileName = new File("C:/myfil ...

  4. ajaxSubmit

    $('button').on('click', function() {    $('form').on('submit', function() {        var title = $('in ...

  5. 初涉定制linux系统之——自动化安装Centos系统镜像制作

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建O__O "….. 本 ...

  6. gulp系列文章一 fis vs grunt vs gulp,为什么要是gulp呢?

    gulp是最近火起来的前端构建工具,大有赶超grunt之势,它和grunt这种构建工具比较像. grunt是写一个Gruntfile.js来写配置代码,gulp则是写一个gulpfile.js来写配置 ...

  7. OpenCV linux cmake添加使用

    安装好opencv之后: 只需要添加一下,就可以方便的使用opencv了,find_package opencv 会寻找FindOpenCV.cmake find_package(OpenCV REQ ...

  8. oracle for loop循环以及游标循环

    1. for in loop形式 DECLARE    CURSOR c_sal IS SELECT employee_id, first_name || last_name ename, salar ...

  9. I/O知识

    1.jdk1.4之前(jdk1.4开始提供了nio)的早起版本,java对I/O的支持并不完善,开发人员开发高性能I/O程序时,面临的问题主要有:     没有缓冲区,I/O性能存在问题     没有 ...

  10. XML文件的读写

    using System; using System.Collections.Generic; using System.Xml; namespace COMMON { public class Xm ...