gpt4 book ai didi

delphi - 记录构造函数能让记录常量更简洁吗?

转载 作者:行者123 更新时间:2023-12-03 15:50:49 27 4
gpt4 key购买 nike

我有一些表格数据:

Foo       Bar-------------fooes     42bars      666 ...

So, I declare the entity structure:

type TFoo = record
Foo: string;
Bar: Integer
end;

和实体表:

const FOOES = array [M..N] of TFoo = (
// Have to specify the field names for each record...
(Foo: 'fooes'; Bar: 42),
(Foo: 'bars'; Bar: 666)
{ so on }
);

如您所见,这看起来非常冗长和多余,这是因为我初始化了所有记录的所有字段。如果我复制其他地方准备的表格数据,则需要进行大量编辑。我不想枚举所有字段并坚持使用更简洁的 C 风格,即仅使用常量。这里是记录构造函数...

在这种情况下记录构造函数可以帮助我吗?

这是一个 C 语言的示例。您会注意到我们不必在每个声明中指定字段名称:

#include <stdio.h>

typedef struct {
char foo[10];
int bar;
} foo;

int main(void) {
/* Look here */
foo FOOES[2] = {{"foo", 42}, {"bar", 666}};
int i = 0;
for (; i < 2; i++) {
printf("%s\t%d\n", FOOES[i].foo, FOOES[i].bar);
}
return 0;
}

最佳答案

const 只是一个只读的var,当启动可执行文件时,它会在代码中加载/映射。

您可以创建一个 var 记录(或一个 const 但覆盖 writable const option ),然后在单元的初始化部分对其进行初始化。

var FOOES = array [M..N] of TFoo;

....

initialization
SetFooArray(FOOES,['fooes',42,'bar',230]);
...
end.

自定义SetFooArray()函数会将所有const数组参数放入FOOES中。

我有时使用这种技术来初始化可计算数组(例如转换或查找表)。有时,在启动时计算一次巨大的数组确实有意义,只需几行代码即可在源代码中节省一些 KB 的 const。

但我不确定这对于你的情况是否值得。默认的 const 声明有点冗长,但如果您使用 Ctrl+C/Ctrl+V 或查找和替换,则不是问题。它是最标准的,如果您稍后更改记录布局,它是安全的(而 C 构造可以编译而不会出错),并且将创建一个真正的常量。

关于delphi - 记录构造函数能让记录常量更简洁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8303348/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com