我正在編寫我的第一個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