Arrays 是否可以连接字符串的常量数组?

Arrays 是否可以连接字符串的常量数组?,arrays,delphi,constants,delphi-2010,Arrays,Delphi,Constants,Delphi 2010,我已经声明了几个常量数组,我想声明更多由这些数组组成的常量,但我无法确定是否有一种合理的方法来实现 const Common_Strings : array [0..1] of string = ('foo','bar'); Extra_Strings : array [0..1] of string = ('some','extra'); 我想做的是其中之一: Combined_Strings = Common_Strings + Extra_Strings; Combine

我已经声明了几个常量数组,我想声明更多由这些数组组成的常量,但我无法确定是否有一种合理的方法来实现

const
  Common_Strings : array [0..1] of string = ('foo','bar');
  Extra_Strings : array [0..1] of string = ('some','extra');
我想做的是其中之一:

  Combined_Strings = Common_Strings + Extra_Strings;
  Combined_Strings = (Common_Strings, Extra_Strings);
这看起来似乎应该可以工作,但写起来很难看,维护起来更难看,因为我的实际常量有10+个元素:

  Combined_Strings = (Common_Strings[0], Common_Strings[1], Extra_Strings[0], Extra_Strings[1]);
但愚蠢的是,常量数组的元素不一定是常量:“[DCC Error]MyFile.pas(89):预期为E2026常量表达式”。显然,如果我尝试分配给它们,我会得到“[DCC Error]MyFile.pas(854):E2064 Left side无法分配给”

我注意到也不可能写:

Duplicate_Constant = Common_Strings;
(“需要常量表达式”。真的。)


有没有办法将常量数组组合成更多的常量数组?

类型化常量只能用常量表达式声明。您正试图根据类型化常量声明类型化常量。因为类型化常量不是常量表达式,所以您看到的编译器消息是经过设计的

结论是两个类型常量数组的串联只能在运行时执行。因此,连接的结果只能存储到变量而不是常量中

本文件明确说明了这一点(我的重点):

若要声明数组常量,请将 数组的元素,用逗号分隔,位于 宣言的结尾。这些值必须为 由常量表达式表示


FWIW您可以将字符串的常量数组传递给需要“字符串数组”参数的函数。所以有些东西是有效的!为什么不简单地使用一个变量?这类似于还有一个丑陋的黑客:包含文件。如果每个include文件都包含一个字符串常量列表,则可以使用其中的常量声明类型化数组:SILLY1:string=({$iaa.inc})的数组[1..3];(aa.inc包含一行:“一”、“二”、“三”)。如果您有大量字符串要操作,则可能是合理的。知道类型化常量为什么不是常量表达式吗?我总是觉得这有点奇怪。。。这是一个“仅仅因为”的问题,还是我在背后缺少了一些逻辑?@Marjan我相信这是有逻辑的,但只有最初的设计师才能权威地回答。在很早的TP版本中,类型化常量是可写的。也许这就是设计的动力。我还发现这个限制非常有限。啊,当然是可写常量。这些矛盾中的另一个…:)