3.7.4 해석 순서(Resolution Order)
3.7.4 해석 순서(Resolution Order)
해석 순서는 한정되지 않은 식별자(unqualified identifiers)가 관련될 때 중요해져요. 이들은 foo(), foo = 1, foo.field 형태의 표현식(expressions)입니다. 마지막 경우는 특히 haxe.ds.StringMap 같은 모듈 경로를 포함하는데, 여기서 haxe는 한정되지 않은 식별자예요.
여기서 해석 순서 알고리즘을 설명하는데, 이는 다음 상태에 의존해요:
- 선언된 지역 변수(local variables)(함수 인자 포함)
- import된 모듈, 타입, static
- 사용 가능한 정적 확장(static extensions)
- 현재 필드의 종류(static 또는 member)
- 현재 클래스와 그 부모 클래스에 선언된 멤버 필드
- 현재 클래스에 선언된 static 필드
- 기대 타입(expected type)
- 표현식이
untyped인지 아닌지
그림: 식별자 i의 해석 순서
식별자 i가 주어졌을 때, 알고리즘은 다음과 같아요:
i가true,false,this,super,null이면 그에 해당하는 상수로 해석하고 멈춤.- 접근 가능한 이름이
i인 지역 변수가 있으면 그것으로 해석하고 멈춤. - 현재 필드가 static이면 6으로 감.
- 현재 클래스나 그 부모 클래스 중 하나에 이름이
i인 필드가 있으면 그것으로 해석하고 멈춤. - 현재 클래스 타입을 첫 인자로 하는 정적 확장이 사용 가능하면 그것으로 해석하고 멈춤.
- 현재 클래스에 이름이
i인 static 필드가 있으면 그것으로 해석하고 멈춤. - import된 static과 정적 확장 중에서 동작을 결정하고, 그 클래스에서 열거 열거 생성자/필드를 해석.
- import된 모듈에서 이름이
i인 타입을 찾으면 그것으로 해석하고 멈춤. - import된 타입에서 이름이
i인 타입을 찾으면 그것으로 해석하고 멈춤. i가 필드 또는 메서드 이름이고 타입이Dynamic이거나 알려지지 않았으면Dynamic필드 접근으로 해석하고 멈춤.i가 추상(abstract)이라면@:resolve메타데이터를 사용해 동작을 결정.i가 언어(해석되지 않은) 형태의 지원을 받는 매크로(macro)라면 매크로 형식으로 해석.- 위의 그 어느 것도 해당하지 않으면 해석 실패 오류를 보고하고 멈춤.
만약 untyped로 표시된 표현식에 식별자가 나타나면, 해석 순서는 10번으로 바로 간다.
출처: Resolution Order
본문
해석 순서란
한정되지 않은 식별자의 해석은 정해진 순서(아래에서 위 우선)로 수행돼요. 이는 지역 변수, 클래스 필드, static, import, 정적 확장 등의 다양한 소스를 검사합니다. 가장 우선순위가 높은 것부터 지역 변수 → 상수 → 클래스 멤버 → static → import 순서입니다.
순서의 핵심
식별자가 상수(true/false/this/super/null)인지, 지역 변수인지, 현재 클래스/부모의 멤버인지 순차적으로 확인하고, 발견되면 그 자리에서 멈춥니다. static 필드, import된 static 확장, import된 모듈/타입으로 점점 범위를 넓혀 갑니다.
untyped 특수 처리
untyped 표현식 안에서는 해석 순서가 10번(Dynamic 필드 접근)으로 바로 점프해요.