【发布时间】:2012-01-17 10:25:03
【问题描述】:
(对于“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. */
}
【问题讨论】:
-
编译器给你什么错误?根据:d-programming-language.org/hash-map.html,我在您的代码中没有看到任何错误
-
我得到不同的错误取决于我把它放在哪里。目前,通过将其放在 .d 文件的顶层,我得到“错误:不是关联数组初始值设定项”。我想这意味着语法关闭了?当我用谷歌搜索错误时,没有命中。 d 站点也没有列出关联数组初始化器的特殊语法。我很困惑。
-
你有没有尝试在几个语句中初始化它?助记符信息[字符串] 助记符表; mnemonic_table["ADD"]={ mnemonic_format.Format3M, 0x18 };
-
然后我得到“没有声明符 mnemonic_table["ADD"] 的标识符”,完全使用您的代码。注意:这只是错误的第一行,所有的助记符都会被提及。
-
我已经编辑了我的问题帖子以展示一种可行的方式 --- 但我真的希望有更好的语法。我希望有人会发布不同的解决方案。
标签: initialization d associative-array