스칼라의 explicitly-typed self references의 가장 일반적인 사용되는 모듈의 의존성이 같은 선언 ", Cake pattern"는있는 것 같다 B
, A
, 잠시 케이크 패턴을 무시하고 C
이러한 유형의 매개 변수로, 모든 타입 수준의 일을 참조 할 수 있습니다 :유용성은
class Outer[A, B, C] {
class Inner { this: A with B with C =>
// ...
}
}
... 또는 추상 형식 구성원 : A
, B
및 C
이 특징으로 알려져 있지 않기 때문에이 경우도에서
class Outer {
type A
type B
type C
class Inner { this: A with B with C =>
// ...
}
}
우리가,
abstract class Inner extends A with B with C
을 쓸 수 있었다. 명시 적으로 형식화 된 자체 참조가 필요합니다. 그러나, 나는 오직 케이크의 특성으로 수행 패턴을 본 적이 :이 경우
trait A { def a }
trait B { def b }
trait C { def c }
class Foo { this: A with B with C =>
// ...
}
을, 우리는 대신 내가 잘못 아니에요 경우 같은 의미를 가지고있는, 직접 abstract class Foo extends A with B with C
를 작성할 수 있습니다. 나 맞아? 그렇지 않다면 그들은 어떻게 다른가? 그렇다면 왜 모든 사람이 관계없이 명시 적으로 형식화 된 자체 참조를 사용하는 것입니까?
가능 중복 [스칼라 유형 및 자기 특성 서브 클래스 사이의 차이가 무엇인가요? (http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self 유형과 형질 하위 클래스) – sschaef
@sschaef 거기에 다른 질문이 있지만, 그의 대답 아래 다니엘의 의견 중 하나는 내가 찾고있는 대답일지도 모른다. 아마 'public' 상속 대'protected 'C++의 상속? – mergeconflict
나를 위해 두 가지 질문은 같은 것을 알고 싶어하는 것처럼 보입니다. 그것들은 추상적 인 클래스와 특성이 같은 방향과 특성이 다릅니다. 아니면 내가 근본적으로 잘못된 것을 이해 했습니까? – sschaef