hmi*_*015 3 scala class this apache-spark
我正在阅读 Spark 书中的高级分析,在第二章中它有以下代码片段:
import org.apache.spark.util.StatCounter
class NAStatCounter extends Serializable {
val stats: StatCounter = new StatCounter()
var missing: Long = 0
def add(x: Double): NAStatCounter = {
if (java.lang.Double.isNaN(x)) {
missing += 1
} else {
stats.merge(x)
}
this
}
def merge(other: NAStatCounter): NAStatCounter = {
stats.merge(other.stats)
missing += other.missing
this
}
override def toString = {
"stats: " + stats.toString + " NaN: " + missing
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我真的对使用this. 在这两个函数中add,merge它是否指的NAStatCounter是代码定义的原始函数?
书评:
“合并方法将另一个 NAStatCounter 实例跟踪的统计信息合并到当前实例中。这两种方法都返回此值,以便它们可以轻松链接在一起。”
当他们说使用this缓动链接时,他们是什么意思?
return this;用多种语言说出您的想法。这个上下文中的“this”指向 NAStatCounter 的一个实例,所以当你说类似的话
var nsCounter = new NAStatCounter()
add 和 merge 方法中的“this”指向实例,即 nsCounter。因此,例如,当您调用 add 时,它会执行它的操作,然后返回 nsCounter,此时您可以调用在 nsCounter 上定义的任何方法。
nsCounter.add(d1).toString()