在中间添加新值时如何增加连续的 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
并保持 value5
和 value6
不变。:
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 步:将部分剪切并粘贴到一行。
- 第四步:最后,输入最后一个值。几秒钟内完成工作。
我有这样的代码
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
并保持 value5
和 value6
不变。:
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 步:将部分剪切并粘贴到一行。
- 第四步:最后,输入最后一个值。几秒钟内完成工作。