最近我在阅读Spark的源代码。当我到达"org.apache.spark.deploy.SparkSubmit"类时,我对关键字"self"和运算符"=> "感到困惑。是否有人可以为我解释一下?
override def main(args: Array[String]): Unit = {
val submit = new SparkSubmit() {
self =>
override protected def parseArguments(args: Array[String]): SparkSubmitArguments = {
new SparkSubmitArguments(args) {
override protected def logInfo(msg: => String): Unit = self.logInfo(msg)
override protected def logWarning(msg: => String): Unit = self.logWarning(msg)
}
}
override protected def logInfo(msg: => String): Unit = printMessage(msg)
override protected def logWarning(msg: => String): Unit = printMessage(s"Warning: $msg")
override def doSubmit(args: Array[String]): Unit = {
try {
super.doSubmit(args)
} catch {
case e: SparkUserAppException =>
exitFn(e.exitCode)
case e: SparkException =>
printErrorAndExit(e.getMessage())
}
}
}
顺便说一句:这个问题跟“重复”那个问题完全不同。虽然这两个问题很相似,但我问的是关于“new class”关键字附近的“self =>”,而不是scala类定义中带有“some name =>”的“重复”问题。 这是不同的问题。
self =>
允许在this
不可用的情况下使用此类的标识。具体来说,在new SparkSubmitArguments
构造函数内,this
指针指的是新类而不是外部类。通过将self
声明为外部类的别名,它可以在内部类中使用。 - Tim