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

标签 delphi syntax constructor record

我有一些表格数据:

Foo       Bar
-------------
fooes     42
bars      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/

相关文章:

delphi - 是否有可能暗示特定的 if 语句分支最有可能在 Delphi 编译器中执行?

java - MySQL语法错误,逗号? - java

constructor - 如何将构造函数添加到 Julia 中的类型别名?

c# - 使用 Moq 模拟构造函数?

javascript - 自定义 Promise 类的构造函数被调用两次(扩展标准 Promise)

c - vsnprintf 等同于 Delphi?

android - Delphi FMX TCalendar - 禁用周末

delphi - Delphi XE下的工具栏2000?

java - 为什么在写';'时没有收到任何警告或错误?

c - 地址=通过宏定义的数据