자기 : t => 그리고 이것 : t => 특성을 정의 할 때 동일한 의미를 가지고 있습니까?

StackOverflow https://stackoverflow.com/questions/2219091

  •  19-09-2019
  •  | 
  •  

문제

내가 사용할 수있는 것 같습니다 self 또는 this 혼합 인스턴스를 참조하거나 혼합 인스턴스를 제한하기 위해. 예를 들어, 그와 동일합니까?

scala> trait A { self: List[_] => }
defined trait A

scala> trait B { this: List[_] => }
defined trait B

이것은 단지 컨벤션 일입니까, 아니면 this 몇 가지 이점을 제공합니까?

도움이 되었습니까?

해결책

"this"이외의 이름을 사용하면 Enclosing 인스턴스를 참조하는 멤버 유형이있는 경우 유용 할 수 있습니다. 예를 들어,

trait Outer { self =>
  trait Inner {
    def outer = self
  }
}

바람직합니다.

trait Outer {
  trait Inner {
    def outer = Outer.this
  }
}

어떤 상황에서는.

다른 팁

자아, 이것, meep, blah 등은 무엇이든 할 수 있습니다. 그것은 컴파일러에서만 사용하여 어떤 클래스를 캐스팅 할 클래스를 결정하는데 (그것을 호출 할 때) 실제로 바이트 코드에 나타나지 않습니다.

로컬 식별자가 자체 유형 정의를 무시하기 때문에 이름 지정시주의를 기울이십시오.

trait A {
  def baz = println("baz!")
}
trait B {
  foo: A => 
  val foo = "hello"   
  // def bar = foo.baz // does not compile because foo is String, not A
  def bar = foo.substring(1)
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top