scala中的self =>

简介: scala中的self =>

scala的一些开源项目的源码中总是能看到类似self =>关键字,那这到底代表什么呢?在此,记录一下,仅作为笔记

  • this 别名
    这种相当于给this起了一个别名self,这里的self可以换成其他的你自己喜欢的字符串,看一下spark的源码sparkSession的定义:
class SparkSession private(
    @transient val sparkContext: SparkContext,
    @transient private val existingSharedState: Option[SharedState],
    @transient private val parentSessionState: Option[SessionState],
    @transient private[sql] val extensions: SparkSessionExtensions)
  extends Serializable with Closeable with Logging { self =>
  ...
  @Unstable
  @transient
  lazy val sessionState: SessionState = {
    parentSessionState
      .map(_.clone(this))
      .getOrElse {
        val state = SparkSession.instantiateSessionState(
          SparkSession.sessionStateClassName(sparkContext.conf),
          self)
        initialSessionOptions.foreach { case (k, v) => state.conf.setConfString(k, v) }
        state
      }
  }

该段中用self作为this的别名,在sessionState的构造中引用了该self别名


自身类型

当self 后面带类型的时候,这个时候就不是别名了,就是自身类型了,什么意思呢?

也就是说当类中定义了类似self: X =>以后,该类实例化或者子类的实现的时候,必须混入X类型,当然X的类型 也可以是定义该类的自身类型。

看一下spark的源码TreeNode的定义以及实现类:

abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product {
// scalastyle:on
  self: BaseType =>
  val origin: Origin = CurrentOrigin.get
case class Abs(child: Expression)
    extends UnaryExpression with ExpectsInputTypes with NullIntolerant {
  override def inputTypes: Seq[AbstractDataType] = Seq(NumericType)
abstract class UnaryExpression extends Expression 

可以知道TreeNode的子类Abs 范型为Expression,而Abs继承了UnaryExpression ,而UnaryExpression继承了Expression

当然该self的也可以用其他字符串代替

相关文章
|
3月前
|
并行计算 前端开发 安全
Scala
Scala
37 0
|
3月前
|
分布式计算 Java 大数据
Scala01 —— Scala基础
Scala 是一种基于 JVM 的多范式编程语言,它融合了面向对象和函数式编程的特点。本文档介绍了Scala的基础知识,包括如何搭建开发环境、语言特性、变量和数据类型、程序逻辑、运算符、控制流、集合以及方法和函数的使用。特别强调了Scala集合的重要性,它们作为数据结构支持多种操作,并且有许多内置的算子和库来解决问题。文档还涵盖了如何在IDEA中配置Scala SDK,以及如何使用元组、映射、数组和模式匹配等核心概念。此外,文档还讨论了Scala与Java变量的区别,以及如何通过隐式类和字符串插值等扩展语言功能。
43 6
Scala01 —— Scala基础
|
Scala 索引 容器
四天掌握Scala(4)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
112 1
四天掌握Scala(4)
|
Java 编译器 Scala
四天掌握Scala(2)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
118 1
四天掌握Scala(2)
|
SQL 分布式计算 算法
四天掌握Scala(3)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
160 0
四天掌握Scala(3)
|
SQL Java 大数据
四天掌握Scala(1)
你好看官,里面请!今天笔者讲的是scala。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
181 0
四天掌握Scala(1)
|
Java Scala
【Scala】Scala之Numbers(二)
 前面已经学习了Scala中的String,接着学习Scala的Numbers。
175 0
【Scala】Scala之Numbers(二)
|
Java Scala
【Scala】Scala之Numbers(一)
 前面已经学习了Scala中的String,接着学习Scala的Numbers。
137 0
【Scala】Scala之Numbers(一)
|
分布式计算 JavaScript 前端开发
Scala 必知必会
Scala 必知必会 3
104 0
Scala 必知必会
|
Java Scala
Scala总结
1、Scala简介 2、Scala中运算符和流程控制 3、Scala中方法和函数 4、类和对象 5、数组和集合
204 0