복붙노트

[SCALA] 자기 형 주석이 자기의 차이?

SCALA

자기 형 주석이 자기의 차이?

다양한 스칼라 문학에서 나는 "자기"를 사용하여 일부 자기 형 "이"을 사용하여 주석 등을 참조하십시오

trait A { this: B => ... }
trait A { self: B => ... }

"이"또는 "자기"를 사용하여 사이의 실제 차이가 있나요? 전혀 사용 어떤 이름 중요합니까? 이것은 단지 유효한가요?

trait A { foo: B => ... }

해결법

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

    1.세 가지 형태는 유효하며, B는 클래스 A.이 유형으로 간주되는 효과를 가질

    세 가지 형태는 유효하며, B는 클래스 A.이 유형으로 간주되는 효과를 가질

    처음 두 변종

    trait A { self: B => ... }
    trait A { foo: B => ... }
    

    이 클래스 내에서이 참조에 액세스하는 데 유용 형질 A.이 별칭으로서 (각각 foo는) 자기 소개. 즉 그 안에 중첩 된 클래스에서 특성 A의이 참조에 액세스 할 때 당신은 그 대신 A.this 자체를 사용할 수 있습니다. 예:

    class MyFrame extends JFrame { frame =>    
      getContentPane().add( new JButton( "Hide" ) {
        addActionListener( new ActionListener {
          def actionPerformed( e: ActionEvent ) {
            // this.setVisible( false ) --> shadowed by JButton!
            frame.setVisible( false )
          }
        })
      })
    }
    

    세 번째 변형,

    trait A { this: B => ... }
    

    이 별칭을 소개하지 않는다; 그냥 자기 유형을 설정합니다.

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

    2.이 항상 안쪽 템플릿에 의해 정의 된 객체를 참조한다는 점에서 차이가 있습니다.

    이 항상 안쪽 템플릿에 의해 정의 된 객체를 참조한다는 점에서 차이가 있습니다.

    당신이 당신의 자기 형 foo를 호출한다면, 당신은 여전히 ​​물론, 당신이 그것에 의해 정의 된 객체를 참조 할 경우 내부 템플릿에,하지 않는 한이 (로 참조 할 수 - 그리고 당신이하지 않는 한하지 분명 내부 템플릿의 자기 형 같은 이름)이 아닌 다른 방법의 원형을 제공합니다.

  3. from https://stackoverflow.com/questions/4017357/difference-between-this-and-self-in-self-type-annotations by cc-by-sa and MIT license