다음 클래스의 자체 유형 주석의 목적/의미는 무엇입니까?클래스/특성이없는 베어 자체 유형
첫 번째 예에서 자체 주석은 전혀 사용되지 않습니다. 파생 된 클래스에서 뭔가가 진행되고 있습니까?
abstract class StrippingTruncatingWriter(out: JPrintWriter)
extends JPrintWriter(out)
with StrippingWriter
with TruncatingWriter {
self =>
def clean(str: String): String = truncate(strip(str))
override def write(str: String) = super.write(clean(str))
}
또 다른 예가 있습니다.이 경우에는 클래스 내에서 자체의 사용법이 있지만, 대신 "this"를 사용하지 않는 이유는 무엇입니까?
class HiveContext(sc: SparkContext) extends SQLContext(sc) {
self =>
// Here is how the self type annotation is used within the class:
val hivePlanner = new SparkPlanner with HiveStrategies {
val hiveContext = self
override val strategies: Seq[Strategy] = Seq(
CommandStrategy(self),
HiveCommandStrategy(self),
첫 번째 사용법은 리팩터링을 사용한 커밋의 일부이므로 대부분의 감독이 필요합니다. 커밋은 드물게 주석 처리 된 코드를 가지고 있기 때문에 계속 진행되고 있습니다. 아마도 그것은 원래 IMain을위한 믹스 인이었을 것입니다. 그 곳에서 스스로되기 전에 self.out이 필요할 것입니다. https://github.com/scala/scala/commit/7aca20d8d31790569557c87406a74c0c7377de79 –
@ som-snytt 흥미 롭습니다 - 조사 해 주셔서 감사합니다. 저는 실제로 여기에 스칼라 소스 코드를보고 있다는 것을 깨닫지 못했습니다. – javadba