我是 Free Pascal 和 Lazarus 的新手。我正在测试新的“高级记录”功能并得到看起来是不必要的编译器警告。
代码很简单,只是用单一方法初始化数据字段的记录。就像是:
{$mode delphi}
type TTest =
record
a,b: double;
procedure Init(x,y: double);
end
procedure TTest.Init(x,y: double);
begin
test.a := x;
test.b := y;
end;
var t: TTest;
begin
t.Init(0.1,0.2);
显示的最后一行“t.Init()”总是会生成一个编译器警告“变量“t”似乎没有被初始化”。
好的,这只是警告,所以显然我可以忍受它,但我只是想确保这不是由于我的一些潜在的误解。
编辑以添加新信息。
重新方法与构造函数点。再看看这个,我很高兴 FPC 不允许构造函数进行记录。Delphi 有构造函数但没有析构函数,据我所知,构造函数(用于记录)绝对没有做任何方法不能做的事情。我是一个极简主义者,所以对我来说,没有任何意义的额外语法只做一些现有的语法。
特别是对于像这样的简单记录,声明它的行为(var t: TTest)完成了该记录所需的所有“构造”。其他任何东西(比如我的 Init)都只是设置值,它并没有构建任何东西。所以据我所见,构造函数不是答案,编译器只需要删除警告。
在研究这个问题时,我遇到了另一种经常使用的技术,即所谓的“工厂函数”。即记录之外的函数,例如:
function InitTTest(x,y: double): TTest;
begin
Result.a := x;
Result.b := y;
end;
这种技术确实有效,并且消除了警告信息。但是我不喜欢这种方法,我不会使用它。高级记录没有类的继承和其他特性,封装就是它们的全部功能。所以我真的不喜欢像这样在唱片之外制作一个“工厂功能”。
请记住,以上只是一个“菜鸟”的意见,在这里做了一些研究来回答我自己的问题。因此,如果我对上述任何内容有误,我很高兴得到纠正。:)