(对于“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,但是由于在线上没有很多教程,所以似乎很难学习。
谢谢!
附带说明一下:是否可以将元组用于关联数组元素而不是自定义结构?
编辑
到目前为止,我发现了一种方法,但是这很丑陋:
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. */
}
最佳答案
在D中,始终在运行时中创建内置的关联数组文字,因此当前无法通过在声明位置分配一些值来初始化全局关联数组。
如您所见,您可以通过为module constructor中的关联数组分配一个值来解决此问题。
代码中的另一个问题是结构初始化文字。您应该更喜欢D-style结构初始化程序,而不是C风格的初始化程序。
例子:
struct Foo {
int a;
string b;
}
Foo[string] global;
static this() {
global = [
"foo" : Foo(1, "hurr"),
"bar" : Foo(2, "durr")
];
}
void main() {
assert(global["foo"].a == 1);
}
关于initialization - 初始化结构值和字符串键的关联数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8457156/