자기 : t => 그리고 이것 : t => 특성을 정의 할 때 동일한 의미를 가지고 있습니까?
문제
내가 사용할 수있는 것 같습니다 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)
}
제휴하지 않습니다 StackOverflow