[SCALA] 위 유형 경계에서 작동하지 않는 추상 형식을 무시 케이크 패턴
SCALA위 유형 경계에서 작동하지 않는 추상 형식을 무시 케이크 패턴
하지 =로 : 나는 추상적 인 특성과 함께 <입력 무시하려면 (여기에 답 스칼라 상한 등을 : 값이 형식 매개 변수의 멤버가 아닙니다).
나는 케이크 패턴을 사용하기를 원하지만이없는 작업을 수행, 난 왜 이해가 안 돼요?
trait A {
def ping = println("ping")
}
trait Cake {
type T
}
trait S { this: Cake =>
type T = A
def t: T
t.ping
}
OK,이 예제를 실행,하지만 내 실제 사용 사례에 난 <와 유형을 대체하려면 :하지와 = .IT 이유는 t 기능에 액세스 할 수없는 것?
trait S { this: Cake =>
type T <: A
def t: T
t.ping
}
오류 값 핑이 S.this.T의 구성원이 아닌 반환
해결법
-
==============================
1.그것은 스칼라의 타입 시스템의 단점입니다. 믹스 인의 회원을 결정할 때, 스칼라는이 규칙을 사용합니다 : 첫째, 콘크리트 항상 추상적 우선합니다. 둘째, 두 멤버는 콘크리트, 또는 선형화 주문 승리 이후에 오는 두 추상, 다음 하나 둘 경우.
그것은 스칼라의 타입 시스템의 단점입니다. 믹스 인의 회원을 결정할 때, 스칼라는이 규칙을 사용합니다 : 첫째, 콘크리트 항상 추상적 우선합니다. 둘째, 두 멤버는 콘크리트, 또는 선형화 주문 승리 이후에 오는 두 추상, 다음 하나 둘 경우.
또한, 자기 특성은 유형
trait S { this: C => ... }
암시 적으로 증강된다
trait S { this: S with C => ... }
그래서 형질 S의 정의는 귀하의 경우에는 S. 내에서 액세스 할 수 있는지, 형질 S는 다음과 같이 볼 수있다 :
trait S { this: S with Cake => type T = A def t: T t.ping }
이 케이크의 추상적 인 T보다 우선하기 때문에 이제 한 T 콘크리트와 같이이 괜찮습니다. T는 추상적 인 경우에, 케이크의 하나는 선형화 순서와 승리 이후에 cames. 그리고 T는 상한, 그래서 멤버 핑을하지 않습니다. 이 문제를 해결하는 한 가지 방법은 서면에 의해 선형화 순서를 변경하는 것입니다 :
trait S { this: Cake with S => type T <: A def t: T t.ping }
스칼라 대신 선형화 순서에 따라 하나의 구성원을 따기의 추상적 인 유형의 모든 구성원 제약은 믹스 인에 병합되는 것을 말한다 다른 규칙이 있다면 그것은 청소기 될 것입니다. 그것은 우리가 미래에 고려할 변화, 그러나 우리는 이전 버전과의 호환성에주의 할 필요가있다.
from https://stackoverflow.com/questions/10213395/cake-pattern-with-overriding-abstract-type-dont-work-with-upper-type-bounds by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크 : 트랜스 DataFrame를 집계하지 않고 (0) | 2019.11.10 |
---|---|
[SCALA] 어떻게 스파크 dataframe에 목록 / 배열에서 새 열을 추가하는 아파치 불꽃 (0) | 2019.11.10 |
[SCALA] 평균으로 누락 된 값을 교체 - 불꽃 Dataframe을 (0) | 2019.11.10 |
[SCALA] 어떻게 선물 꼬리 재귀를 포함하는 함수를 어떻게해야합니까? (0) | 2019.11.10 |
[SCALA] 업로드 된 파일의 경로를 얻는 방법 (0) | 2019.11.10 |