2014-11-11 13 views

답변

6

당신은 모듈 생성자 내에서 연관 배열 상수를 초기화 할 수 있습니다 : 그것은하지 않습니다하지만,

const /+ or immutable +/ (string [char]) AA1; 
static this() { 
    AA1 = [ 
     'a' : "fkclopel", 
     'b' : "poehfftw" 
    ]; 
} 

import std.stdio; 
void main() {writeln (AA1);} 

연관 배열 리터럴에 manual section 명시 적으로 "는 AssocArrayLiteral 정적 아무것도를 초기화 할 수 없습니다."고 주장한다 왜 그런지에 대한 단서를 제공하십시오.

+7

이유는 현재 구현 (여러 가지면에서 차선책)에서 연관 배열 레이아웃과 기타 세부 사항이 컴파일러에 완전히 불투명하기 때문입니다. AA 리터럴은 실제로 데이터를 구성하는 런타임 함수 (파일 src/druntime/src/rt/aaA.d, 함수 _d_assocarrayliteralTX)를 호출합니다. 이 함수는 나중에 컴파일 할 때 존재하지 않을 수도 있으며 나중에 바이너리 라이브러리에서 링크됩니다. 정적 데이터는 알려진 레이아웃을 필요로하기 때문에 컴파일러가 실행 파일의 데이터 세그먼트에 넣을 수 있으며이 함수는 블랙 박스이므로 사용할 수 없습니다. –

+1

연관 배열에 대한 견고한 라이브러리 구현이 있으면이 제한은 결국 사라질 것입니다. 현재이 효과에 대한 작업이 진행 중이며 완료 될 것으로 보입니다. – Meta