scala - 클래스 - 정적 속성 정적 메서드 또는 정적 필드 이니셜 라이저 는 this 키워드 를 사용할 수 없습니다




''this ''와 형식/차이가없는 명시 적 자체 참조 (2)

내가 명시 적으로 입력 된 자기 참조에 대한 사용을 이해 :

trait T {
  self : T2 =>
  ...
}

몸에서는 self this 별칭이지만 T with T2 가있는 더 정확한 형식 T with T2 있습니다.

자, 코드에서 이것을 보았습니다 :

trait T {
  self =>
  ...
}

즉, 추가 유형 정보없이 명시적인 자체 참조입니다. 이 구성에서는 self this 별칭이 아닌 상황 this 있습니까?


이 경우 selfthis 말하는 또 다른 방법입니다.

그러나 내부 클래스가있는 경우에는 내부 클래스 내부가 내부 클래스이고 self 클래스가 컨테이너 클래스가됩니다.

그것이 AFAIK의 유일한 차이점입니다.


this 의 별명입니다.

첫 번째 예는 형질이 적절한 유형으로 혼합되었는지 확인하고 그러한 방법을 사용할 수있게하는 데 유용합니다.

두 번째 예제는 이름 범위가 충돌하는 내부 클래스가있을 때 외부 범위를 표시 할 때 유용합니다. 예 :

trait U {
  self =>
  val name = "outer"
  val b = new AnyRef {
    val name = "inner"
    println(name)
    println(this.name)
    println(self.name)
  }
}

그런 다음 new AnyRef with U 인쇄됩니다.

inner
inner
outer

"self"는 특별한 키워드가 아닙니다. "bananas =>"또는 원하는대로 사용할 수 있지만, 규칙에 따라 자주 사용됩니다.

이것은 스윙에서 상당히 많은 부분을 차지하는데, 보통 내부 클래스 (스크롤바 안의 텍스트 상자 등)에 많은 것을 만듭니다. 보통 외부 클래스와 같은 이름을 가진 많은 메소드가 있습니다.





self-type