- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,其中多个单元都有初始化部分。我想控制这些 block 的执行顺序。
根据以下question ,这基于单元的编译顺序,因此最终顺序应基于源 DPR 的 use 子句中单元的排列。
以下是我的项目的DPR源码:
program X;
uses
Vcl.Forms,
uMain in 'uMain.pas' {MainForm},
uFooA in 'uFooA.pas',
uFooB in 'uFooB.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
我的问题是,这根本不是初始化 block 的执行顺序。
How it should be | How it actually is
|
1. uMain | 1.uFooA
2. uFooA | 2.uFooB
3. uFooB | 3.uMain
我很乐意提供 SSCCE,但我根本无法在新项目上重现此问题。
我尝试重新构建该项目,但没有成功。
我错过了什么?
最佳答案
尽管编译器有一种严格的方式来确定初始化,但当存在许多具有许多依赖性的单元时,人类很难准确地弄清楚和控制。
例如您的 DPR 可以使用 UnitA、UnitB、UnitC;
,但如果 UnitA
依赖于 UnitB
,则必须首先初始化 UnitB。
诚然,具有初始化和最终化部分的单元功能可以使添加功能像“添加单元”一样简单。尽管这看起来很棒,但实际上,在大型项目中它往往会造成阻碍。我个人认为这个“功能”非常糟糕。
控制单元初始化顺序的最佳且最可靠的方法是明确地执行此操作。例如
program X;
uses
Vcl.Forms,
uMain in 'uMain.pas' {MainForm},
uFooA in 'uFooA.pas',
uFooB in 'uFooB.pas';
{$R *.res}
begin
Init_uMain;
Init_uFooA;
Init_uFooB;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
Finalise_uFooB;
Finalise_uFooA;
Finalise_uMain;
end.
显然上面的代码缺乏适当的 try..finallys 并且会因为许多需要初始化的单元而变得困惑。但是,还可以应用其他技术来使事情变得易于管理。
关于delphi - 单元初始化顺序与源代码中所示不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184905/
下面的代码应该显示我的表格中的随机帖子;它执行此操作,但它显示的帖子的 ID 与 URL 中的 ID 不同。 如何让它显示 URL 中的内容?谢谢。 $db = new PDO('mysql:host
我有一个自定义类,其中覆盖了 equals() 和 hashCode() 方法。我将该类的实例存储在 TreeSet 中。我无法弄清楚为什么 tree.contains(someObject) 返回
我正在尝试通过使用代码请求对healthkit中类别的授权: let healthKitStore: HKHealthStore = HKHealthStore() let healthKitType
我的代码的相关部分: 模型架构: Sequential( layers=[ BatchNormalization(input_shape=input_shape),
我是一名优秀的程序员,十分优秀!