Delphi中的集合XE与它们在D7中的工作方式不同

WeG*_*ars 7 delphi delphi-7 delphi-xe

我在Delphi 7程序中有这个常量.他们没有在Delphi XE下编译.

TYPE
  TSingleChar= AnsiChar;

CONST
  noData: TSingleChar= '.';
  Ambiguity= ['x'];
  DNA_Ambig= ['x', noData]+ Ambiguity;
Run Code Online (Sandbox Code Playgroud)

[DCC错误] E2026预期的常量表达式.

  1. XE中我的旧代码无法编译的内容是什么?
  2. 我认为代码本身被解释为Unicode.我对么?

Cos*_*und 8

"修复"它像这样:

TYPE
  TSingleChar= AnsiChar;

CONST
  Const_noData = '.';
  noData: TSingleChar= Const_noData;
  Ambiguity= ['x'];
  DNA_Ambig= ['x', Const_noData]+ Ambiguity;
Run Code Online (Sandbox Code Playgroud)

Const_noData就编译器而言,它是一个真正的const,允许您初始化它们noDataDNA_Ambig使用它.而你还是尊重了DRY原则,即有只有一个定义noDataConst_noData.

  • 这对我来说太令人沮丧了.我渴望一些未来的必杀技,当常数确实存在时,你知道,不变. (4认同)

And*_*and 7

const
  Ambiguity:  TAnsiCharSet = ['B', 'D', 'H'];
  Ambiguity2: TAnsiCharSet = ['C', 'c', 't'] + Ambiguity;
Run Code Online (Sandbox Code Playgroud)

没有工作.

const
  Ambiguity = ['B', 'D', 'H'];
  Ambiguity2 = ['C', 'c', 't'] + Ambiguity;
Run Code Online (Sandbox Code Playgroud)

确实有效.类型常量根本不是常量...

(请注意,这个问题与歧义无关.它是关于什么被认为是常数,什么不是.)