我有这样的代码
const
value1 = 1;
value2 = 2;
value4 = 3;
.
.
.
valuen = n;
并说我想将value3 = 3;
添加到列表中,而不必处理将所有值编辑为n的痛苦。
是否有一种内在的方法或技巧可以使将来更容易?
不,如果以这种方式定义并且在中间某处插入新值,则无法更新consts的值。但请看下面:有办法实现这一目标。
但您可以使用枚举代替:
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...
这当然不是类型安全的,需要更多的工作。
对于总是需要这种整数的整数类型或甚至或/和/或组合的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);