delphi - Delphi 编译器错误 E2382 无法使用实例变量调用构造函数的解释
问题描述
我有这个记录(顺便说一句,它也可以是一个类,但有了记录,这段代码更有意义):
interface
type
TMyRecord = record
A: Integer;
constructor Initialize(V: Integer);
procedure InitOne;
end;
implementation
constructor TMyRecord.Initialize(V: Integer);
begin
A := V;
end;
(暂时省略方法 InitOne 的实现)。
据我所知,记录构造函数既可以以函数形式调用,例如类的常规构造函数,也可以以过程形式直接在记录变量上调用(参考:Delphi 中的记录构造函数)。
鉴于此,此代码可以按预期编译和工作:
procedure DoSomething;
var
pMyRec: TMyRecord;
begin
pMyRec.Initialize(1); // constructor called in procedural form
pMyRec := TMyRecord.Initialize(1); // constructor called in functional form
end;
虽然 InitOne 的这个实现没有:
procedure TMyRecord.InitOne;
begin
Self.Initialize(1); // constructor called in procedural form <-- E2382
Self := TMyRecord.Initialize(1); // constructor called in functional form
end;
为什么?不Self.Initialize(1)
应该与 相同pMyRec.Initialize(1)
,两者都称为作用于其“实例”的过程?
解决方案
推荐阅读
- angularjs - 我们如何在更改下拉菜单时获得兄弟姐妹的输入值
- service-fabric-on-premises - ServiceFabric 中的反向代理是否可配置?
- php - How to use class property in another class ?
- c# - 添加视图时如何解决“找不到名为'ScaffoldingAssembly'的指令的处理器'Scaffolding Assembly Loader'”?
- r - get 函数如何以不同的方式评估带引号和不带引号的参数 ' '
- web-scraping - 为什么相同的 URL 给出不同的结果?
- docker - 在 docker 中在基于 Alpine 的映像上安装 Redis
- docker - 如何在 docker swarm 模式下使用 express api 网关?
- dependency-injection - 如何在 SAPUI5 中注入自定义服务
- html - 如何将内容元素与 wordpress 自定义 css 居中对齐?