[SCALA] 액세스 부모의 회원 매크로 주석을 처리 할 수는 없지만
SCALA액세스 부모의 회원 매크로 주석을 처리 할 수는 없지만
나는 종류 다음 (매크로 주석)과 차단의 생각 상태. 내가 주석이라고 @Factory이 있다고 가정하는 목적은 동반자는 대응 객체에 대한 주석 형질 방법을 적용 생성한다. 예를 들어, 특성 A를 주어진 :
@factory
trait A {
val a1: Int
}
생성 될 것으로 예상 코드는 다음 중 하나입니다 :
object A extends Factory[A] {
def apply(_a1: Int) = new A {
val a1 = _a1
}
}
이제 우리는에서 어떤 상속 형질 B가 있다고 가정합니다 :
@factory
trait B extends A {
val b1: String
}
어떤이 생성 해 :
object B extends Factory[B] {
def apply(_a1: Int, _b1: String) = new B {
val a1 = _a1
val b1 = _b1
}
}
후자의 경우, 나는에 존재하는 속성입니다 알아야합니다,하지만 난 그들에 대한 정보를 얻을하는 방법을 모르겠어요. 매크로 주석을 다루는 동안 나는의 (a ClassDef 등) B의 형질 AST 만 액세스 할 수 있습니다. 그 템플릿 (TypeTrees 등) 부모에 대한 참조를 포함하고 있지만, 두 필드는 TPE와 기호는 비어 있습니다.
나이 (가)의 AST에 접근하는 것이 좋은 것입니다. 그러나, 나는 그것이 가능하지 생각합니다. 따라서, 어떤 기호 나 유형 (포인팅 중 부모 또는 현재 유형은) 충분히 좋은 것입니다.
당신이 더 많은 구현 세부 정보를보고 싶은 경우에, 나는 https://github.com/jesuslopez-gonzalez/cool-factory에 프로젝트를 업로드했습니다. 그것은 로컬 값을 적용 생성 할 수 있습니다.
해결법
-
==============================
1.매크로 주석 인수에 가서 나무는 의도적으로 지정되지 않은 있습니다. 그러나 ( "??? (<부모를 대표하는 나무>)"Q) c.typeCheck를 실행 TPE는 누락 된 정보를 제공 할 것입니다.. , 유형 검사 전에 나무를 복제하는 것을 잊지 마세요 때문에 c.typeCheck 변이 바람직하지 않은 수 있습니다 장소에 나무.
매크로 주석 인수에 가서 나무는 의도적으로 지정되지 않은 있습니다. 그러나 ( "??? (<부모를 대표하는 나무>)"Q) c.typeCheck를 실행 TPE는 누락 된 정보를 제공 할 것입니다.. , 유형 검사 전에 나무를 복제하는 것을 잊지 마세요 때문에 c.typeCheck 변이 바람직하지 않은 수 있습니다 장소에 나무.
부모와 자식이 모두 같은 비 최상위 범위에 선언 된 경우, 주석을하지 않습니다 그래서, 부모 어휘 범위에서 수행되는 유형 체킹이 c.typeCheck의 매크로 주석에서와 같이 부모를보고하지 않는 문제가있을 것입니다 반 구축 범위를 볼 수 있습니다. 비슷한 여기에보고되었습니다 https://github.com/aztek/scala-workflow/issues/2#issuecomment-23947943.
유형 검사에서 현재 범위를 제외하는 결정은 최종적인 것이 아니다. 이번 주 내가 매크로 주석을 둘러싸는 범위와 상호 작용하는 방법에 대한 자세한 조금 생각하고있을 것이고, 아마 당신이 할 싶은 일을하기 위해 변경됩니다. 지금은 변화를 할 거라고,하지만 난 확실히 그 변화에서 발생하는 미친 행동이되지 않습니다 확인해야합니다.
from https://stackoverflow.com/questions/19379436/cant-access-parents-members-while-dealing-with-macro-annotations by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서 피보나치 함수를 작성하는 가장 빠른 방법은 무엇입니까? (0) | 2019.11.12 |
---|---|
[SCALA] HList에지도 할 수 없습니다 (0) | 2019.11.12 |
[SCALA] 스칼라에서 가변 길이 인수를 사용하여 (0) | 2019.11.12 |
[SCALA] 멀티 - 프로젝트 수 GIT에서는 SBT 의존성로 사용할 수? (0) | 2019.11.12 |
[SCALA] 어떻게 S3 또는 HDFS에 ML 파이프 라인에서 모델을 저장? (0) | 2019.11.12 |