2008-10-29 84 views
2

我想要做這樣的事情:是否有可能做聲明一個包含另一個常量數組的常量數組?

const 

    MyFirstConstArray: array[0..1] of string = ('Hi', 'Foo'); 
    MySecondConstArrayWhichIncludesTheFirstOne: array[0..2] of string = 
    MyFirstConstArray + ('Bar'); 

基本上我想要的結果如下:

MyFirstConstArray -> ('Hi', 'Foo'); 
MySecondConstArrayWhichIncludesTheFirstOne -> ('Hi', 'Foo', 'Bar'); 

是否有可能以某種方式?

回答

2

AFAIK,你不能那樣做。
但是,如果我們的目標是確保你宣佈你的實際字符串常量只有一次,我建議你申報的個人字符串,然後將它們分組在陣列:

const 
    MyConst1 = 'Hi'; 
    MyConst2 = 'Foo'; 
    MyConst3 = 'Bar'; 
    MyFirstConstArray: array[0..1] of string = (MyConst1, MyConst2); 
    MySecondConstArrayWhichIncludesTheFirstOne: array[0..2] of string = 
    (MyConst1, MyConst2, MyConst3); 

順便說一句,你的語法不正確,你必須精確數組元素的類型。

+0

我已經這樣做了,但我真正想要的是避免在第一個項目中添加新項目時更新每個數組的麻煩。但是,如果沒有辦法做到這一點,那麼這是無法幫助的。 – 2008-10-29 18:44:19

0

我不這麼認爲。你必須在代碼中完成。如果這些是全局常量,則可以在單元的「初始化」部分進行初始化。

1

其實,你可以用記錄來做。我大量使用這種技術爲我的軟件中的某些實體行爲創建定義。這是一個非常強大的技術:

type 
     TPerson=record 
     // generally you'd put all kinds of addition stuff here including enums, 
     // sets, etc 
     saPets:array[0..2] of string; 
     end; 

const 
    scDog='Dog'; 

    MyPeople:array[0..1] of TPerson= 
    ((saPets:(scDog, 'Cat', 'Fish');), 
    (saPets:('Iguana', 'Tarantula', '');)); 

begin 
    ShowMessage(MyPeople[0].saPets[0]); 

end; 

你不能用它做的一件事是引用資源字符串。因此任何翻譯都必須由檢索值的代碼完成。我通常使用枚舉將它們索引 - 這樣做,我可以使軟件更易於更改,因爲如果我留下了一些重要的東西,它將無法編譯。

1

如果訂單不相關,則使用枚舉集合。

type 
    TMyConsts = (tConstFoo, tConstHi, TConstBar); 
const 
    MyFirstConstSet = [tConstFoo, tConstHi]; 
    MySecondConstSet = MyFirstConstSet + [TConstBar]; 
    MyConstStrings: array[TMyConsts] of string = ('Foo', 'Hi', 'Bar'); 

可以使用MyConstStrings陣列解決您的枚舉轉換爲字符串,如果你想要的。取決於你的目標。

相關問題