(для языка программирования "D")
Я пытаюсь инициализировать ассоциативный массив, который имеет элементы struct и должен индексироваться строкой. Я бы импортировал его как модуль из отдельного файла.
Вот чего я хочу добиться (и это не работает - я не знаю, возможно ли это вообще):
mnemonic_info[string] mnemonic_table = [
/* name, format, opcode */
"ADD": {mnemonic_format.Format3M, 0x18},
...
/* NOTE: mnemonic_format is an enum type. */
/* mnemonic_info is a struct with a mnemonic_format and an ubyte */
];
Обратите внимание, что это прекрасно работает для массивов, индексируемых целыми числами.
Оптимально, я бы хотел, чтобы это оценивалось во время компиляции, так как я не буду его изменять. Однако, если это невозможно, я буду рад, если вы подскажете мне лучший способ создания такого массива во время/до непосредственного выполнения.
Мне это нужно, потому что я пишу ассемблер.
Я искал ответ на SO и в интернете, но смог найти только примеры с целыми числами и другие вещи, которые я не понял или не смог заставить работать.
Пока что мне очень нравится D, но, похоже, его трудно изучать из-за того, что в Интернете не так много учебников.
Спасибо!
На заметку: возможно ли использовать Tuples для элементов ассоциативного массива вместо пользовательского struct?
Редактировать
Пока я нашел один способ, но он довольно уродлив:
mnemonic_info[string] mnemonic_table;
static this() { // Not idea what this does.
mnemonic_info entry;
entry.format = mnemonic_format.Format3M;
entry.opcode = 0x18;
mnemonic_table["ADD"] = entry;
/* ... for all entries. */
}