第56讲:Scala中Self Types实战详解

今天学习了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学习内容

时间: 2024-10-09 21:52:01

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

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

package com.parllay.scala.type_parameterizitor import scala.io.{Source, BufferedSource} /** * Created by richard on 15-8-17. * 第58讲:Scala中Abstract Types实战详解 */ /** * scala里的类型,除了在定义class,trait,object时会产生类型, * 还可以通过type关键字来声明类型. type相当于声明一个类型别名: scala

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

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/IVN4EuFlmKk/优酷:http://v.youku.com/v_show/id

第24讲: Scala中SAM转换实战详解

SAM 是single  abstract method的缩写,就是一些接口只有单个抽象方法 假设我们需要做一个按钮,每当按下按钮时,后台记录一次点击次数.在Java中代码实现的方式如下: package com.dt.scala.func import javax.swing.JButton import java.awt.event.ActionListener import java.awt.event.ActionEvent import javax.swing.JFrame objec

DT梦工厂 第24讲 scala中sam转换实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/dHz5JKJxurM/优酷:http://v.youku.com/v_show/id_

Spark经典视频之Scala中Self Types实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频"Scala深入浅出实战经典"视频.音频和PPT下载! 欢迎广大Spark爱好者学习交流.也欢迎广大学习爱好者加入DT大数据梦工厂交流群:462923555DT大数据微信公众账号:DT_Spark 视频观看链接http://www.tudou.com/plcover/Yy5F5gsurSE/ 视频下载地址百度云:http://pan.baidu.com/s/1eQGqzEa腾讯微云:http://url.cn/SshT6b

Scala中Abstract Types实战详解之Scala学习笔记-48

package com.leegh.parameterization import scala.io.BufferedSourceimport scala.io.Source /** * @author Guohui Li */trait Reader { type In <: java.io.Serializable type Contents def read(in: In): Contents}class FileReader extends Reader { type In = Stri

Scala中Self Types实战详解之Scala学习笔记-46

package com.leegh.parameterization /** * @author Guohui Li */class Self { self => val tmp = "Scala" def foo = self.tmp + this.tmp}trait S1class S2 { this: S1 => }class S3 extends S2 with S1 trait T { this: S1 => }object S4 extends T wit

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

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/优酷:http://v.youku.com/v_show/id_

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

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/5LnLNDBKvi8/优酷:http://v.youku.com/v_show/id_