【问题标题】:Is it possible to declare const array item values individually是否可以单独声明 const 数组项值
【发布时间】:2015-06-03 15:54:28
【问题描述】:

给定以下枚举:

type TEnum = (teA, teB, teC);

我想声明一个 TEnum 的 const 数组,但是我发现以下数组项和枚举项之间的连接相对难以阅读和维护(显然我知道我可以详细评论并给出每个项目都有自己的一行):

const AN_ARRAY : array[TEnum] of Integer = (1, 12, 146);

有没有办法像这样声明一个 const 数组?

const
  AN_ARRAY : array[TEnum] of Integer : 
    AN_ARRAY[teA] = 1,
    AN_ARRAY[teB] = 12,
    AN_ARRAY[teC] = 146
  ;

理想情况下我想设置枚举 ord 值并且根本不使用数组,但这意味着我然后 can't use TypeInfo 来操作枚举。

【问题讨论】:

  • {AN_ARRAY[teA] =} 1, 怎么样? :) 我认为除了有序的值列表之外,您不能以其他方式声明常量数组。

标签: arrays delphi constants


【解决方案1】:

没有。数组常量的索引总是隐含的。如果您需要在它们对应的值旁边查看它们,请将它们包含在 cmets 中,但要注意 cmets 可能与实际代码不同步,编译器不会就此发出警告。

const
  AN_ARRAY : array[TEnum] of Integer = (
    1,  // teA
    12, // teB
    146 // teC
  );

【讨论】:

  • 这就是我目前所拥有的,也是我担心的。
  • Rob 没有提供问题的解决方案。他对你的问题的回答是否定的。没有解决办法。
【解决方案2】:

这是另一种方法:

type
  TEnum = (teA, teB, teC);

const
  teAVal = 1;
  teBVal = 12;
  teCVal = 146;

const
  AN_ARRAY : array[TEnum] of Integer = (teAVal, teBVal, teCVal);

【讨论】:

  • 很遗憾不能保证订单,是吗?
  • 没错。这在保留原始问题的同时引入了复杂性。 -1
  • 不,杰米,确实不能保证订单。在这个特定的示例中,很容易识别错误排序的条目,因为枚举值的名称具有明显的顺序(A、B、C)。另一方面,例如,很难识别与TRuntimeError 中的值相对应的条目排序错误的列表。
猜你喜欢
  • 2019-04-01
  • 1970-01-01
  • 2016-05-07
  • 2021-08-24
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多