(для языка программирования "D")
Я изо всех сил пытался инициализировать ассоциативный массив, который имеет элементы структуры и должен индексироваться с помощью строки. Я бы импортировал его как модуль из отдельного файла.
Это то, чего я хочу достичь (и это не работает --- я не знаю, возможно ли это вообще):
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, но, кажется, его трудно выучить, потому что в Интернете не так много учебников.
Спасибо!
С другой стороны: возможно ли использовать кортежи для элементов ассоциативного массива вместо пользовательской структуры?
Редактировать
Есть один способ, который я нашел до сих пор, но он довольно уродливый:
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. */
}