是否可以声明一个包含另一个常量数组的常量数组?

时间:2008-10-29 14:19:27

标签: delphi

我想做这样的事情:

const

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

基本上我想要以下结果:

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

有可能吗?

4 个答案:

答案 0 :(得分: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);

BTW,你的语法不正确,你必须精确的数组元素的类型。

答案 1 :(得分: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;

你不能做的一件事就是引用资源字符串。因此,任何转换必须由检索值的代码完成。我通常使用枚举对它们进行索引 - 这样做,我可以使软件更容易更改,因为如果我留下了重要的东西,它将无法编译。

答案 2 :(得分:1)

如果订单不相关,则使用枚举集。

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

如果需要,可以使用 MyConstStrings 数组将枚举解析为字符串。取决于你的目标。

答案 3 :(得分:0)

我不这么认为。你必须在代码中做到这一点。如果这些是全局常量,则可以在单元的“初始化”部分进行初始化。