我正在编写我的第一个D程序,并试图了解如何实现关联数组。不断出现的问题是,如果我创建一个像这样的数组:访问D中范围内的元素
import std.stdio;
import std.string;
import std.array;
void main(string[] args) {
int[string] arr = ["first" : 1, "second" : 2];
}
一切都编译好。但如果我尝试并将arr移动到main之外 - 进入一个结构体,我得到一个错误:Error:非常量表达式。
,这将引发错误:
import std.stdio;
import std.string;
import std.array;
struct foo {
int[string] arr = ["first" : 1, "second" : 2];
}
void main(string[] args)
{ /* do stuff with foo */ }
我敢肯定,这是一个超级简单的修补程序,但是这是我在D.
第一次尝试
我认为这个问题是结构尺寸在编译时进行计算,但关联数组没有分配,直到运行时和编译器不知道它的大小等。声明它为'enum'可能工作。我可能是错的,但我认为是这样。你也可以尝试制作一个构造函数。 – Bauss 2015-03-31 05:11:20
我试着创建一个构造函数,并得到一个错误,说:结构的默认构造函数只允许与@disable和没有正文。所以我只是将数组设置为枚举,它似乎工作。 – StillLearningToCode 2015-03-31 05:20:44
如果您希望在运行时定义AA,则必须创建一个接受参数的构造函数。即struct foo {this(int [string] _a){this。arr = a;否则,正如L33T所说的那样,在编译时使用enum来定义它。 Compile-Time vs Runtime是我学习D的最大的学习曲线,来自Java背景,至少在你没有的地方。这将需要一点习惯:)! – 2015-03-31 08:24:20