복붙노트

[SCALA] '이' ''와 어떤 유형 / 차이 명시 자기 참조

SCALA

'이' ''와 어떤 유형 / 차이 명시 자기 참조

나는 명시 적으로 입력 된 자기 참조의 사용을 이해 :

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

본문에, 자기는이 별칭입니다하지만 T2와 함께보다 정확한 타입 T가 있습니다.

지금, 나는 코드를 본 적이 :

trait T {
  self =>
  ...
}

즉, 추가 입력 정보가 ​​명시 적 자기 참조입니다. 이 구성에서, 자기는 이것을 단지 별칭되지 않는 어떤 상황이있다?

해결법

  1. ==============================

    1.그것은이의 별칭입니다.

    그것은이의 별칭입니다.

    첫 번째 예는 형질은 적절한 형태로 혼합 된 것을 보장하는 데 유용하고, 이러한 방법을 사용할 수있다.

    당신은 이름 충돌로 내부 클래스를 외부 범위를 볼 수 있도록 할 때 두 번째 예는 유용합니다. 예를 들면 :

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

    U 인쇄와 그리고 새로운 AnyRef

    inner
    inner
    outer
    

    "자기"특별한 키워드 아니다 - 당신은 "바나나 =>"또는 당신이 원하는대로 사용할 수 있지만, 그것은 종종 규칙에 따라 사용됩니다.

    이것은 일반적으로 외부 클래스와 같은 이름을 가진 많은 방법이 내부 클래스 (스크롤 내에서 텍스트 상자 등)에 많이 만들 스윙에 꽤, 돌발한다.

  2. ==============================

    2.이 경우 자체에서 이런 말을하는 또 다른 방법입니다.

    이 경우 자체에서 이런 말을하는 또 다른 방법입니다.

    당신이 내부 클래스가 일어날 경우, 그러나, 내부 클래스 내부의이 내부 클래스가 될 것이다, 자기는 컨테이너 클래스가 될 것입니다.

    즉, 유일한 차이 AFAIK입니다

  3. from https://stackoverflow.com/questions/8073263/explicit-self-references-with-no-type-difference-with-this by cc-by-sa and MIT license