Следующая декларация:Каков синтаксис объявления константной строки [char] AA?
const(string[char]) AA1 = [
'a' : "fkclopel",
'b' : "poehfftw"
];
void main(string args[]){}
дает мне:
C:...\temp_0186F968.d(1,27): Error: non-constant expression ['a':"fkclopel", 'b':"poehfftw"]
в то время как он будет работать с другими видами типа.
Причина в том, что в текущей реализации (которая субоптимальна несколькими способами) ассоциативный макет массива и другие детали полностью непрозрачны для компилятора. Литерал AA просто вызывает функцию времени выполнения (файл src/druntime/src/rt/aaA.d, function _d_assocarrayliteralTX), который отвечает за фактическую организацию данных. Эта функция может отсутствовать даже во время компиляции, связавшись позже с бинарной библиотекой. Поскольку статические данные нуждаются в известном макете, поэтому компилятор может поместить его в сегмент данных исполняемого файла, и эта функция является черным ящиком, и для этого не может быть использована. –
Следует отметить, что это ограничение, в конечном счете, исчезнет, когда будет реализована сплошная реализация библиотеки ассоциативных массивов. В настоящее время идет работа над этим, что, похоже, приближается к завершению. – Meta