在中间添加新值时如何增加连续的 Const 值

How to increment sequential Const values when adding a new one in the middle

我有这样的代码

const
value1 = 1;
value2 = 2;
value4 = 3;
.
.
.
valuen = n;

并说我想将 value3 = 3; 添加到列表中,而不必处理将所有值编辑为 n 的痛苦。

是否有一种内在的方法或技巧可以使将来更容易做到这一点?

不,如果以这种方式定义常量并且在中间某处插入新值,则无法更新常量的值。但是请看下面:有一些方法可以实现这一点。

枚举

但您可以改用枚举:

type
  ValueType = (
    value1 = 1,   // 1
    value2,       // 2
    value4,       // 3
    ...
    valuen);      // n 

您可以轻松添加一个 value3,所有后续值都会相应地移动:

type
  ValueType = (
    value1 = 1,   // 1
    value2,       // 2
    value3,       // 3
    value4,       // now: 4
    ...
    valuen);      // now: n+1 

这也使它们成为类型安全的。当然,如果您真的想将它们用作整数,则必须强制转换:Integer(value3)(读取或写入)或使用 Ord(value3)(读取)。但是您通常会直接将它们用作枚举。您还可以轻松地从中创建集合,这对于常量来说要困难得多。

常量

当然,如果你真的想使用常量,在这种情况下你可以像其他人那样做:

const
  value1 = 1;              // 1
  value2 = value1 + 1;     // 2
  value4 = value2 + 1;     // 3
  value5 = value4 + 1;     // 4
  // etc...

现在,如果您想添加一个 value3,您只需更新几个值:

const
  value1 = 1;          // 1
  value2 = value1 + 1; // 2 
  value3 = value2 + 1; // new: 3
  value4 = value3 + 1; // modified: 4 
  value5 = value4 + 1; // now: 5
  // etc...

这当然不是类型安全的,需要更多的工作。

需要按位运算的参数

对于总是需要整数类型甚至 or-ed/and-ed 此类整数组合且我无法修改的 API,我将再次使用整数常量:

type
  Flags = Cardinal;
const
  Flag1 = 1;           // 1
  Flag2 = Flag1 shl 1; // 2
  Flag3 = Flag2 shl 1; // 4
  Flag4 = Flag3 shl 1; // 8
  // etc.

像这样使用:

MyAPIFunc('Hello, world', Flag1 or Flag3 or Flag4);

您可以使用Succ()功能。当然,使用枚举更容易理解,但这是对你问题的直接回答。

示例:

const
  value1 = 1;
  value2 = succ(value1);
  value4 = succ(succ(value2));
  value5 = succ(value4);
  value6 = succ(value5);

要插入 Value3,您只需更改 value4 并保持 value5value6 不变。:

const
  value1 = 1;
  value2 = succ(value1);
  value3 = succ(value2);
  value4 = succ(value3);
  value5 = succ(value4);

使用 Delphi 编辑器。

  • 第 1 步:在正确的位置添加新的 const 变量:

    const
      value1 = 1;
      value2 = 2;
      value3 =
      value4 = 3;
      value5 = 4;
      value6 = 5;
      value7 = 6;
    
  • 第 2 步:使用 块 selection 快捷方式从 3 到列表末尾 select。 要打开色谱柱模式 selection,请按 Ctrl+O+C 并标记块。或者,使用 Alt 键向下拖动鼠标。

  • 第 3 步:将部分剪切并粘贴到一行。

  • 第四步:最后,输入最后一个值。几秒钟内完成工作。