松开“分配给程序变量的本地程序/功能””限制优雅
考虑以下测试用例:
{ CompilerVersion = 21 }
procedure Global();
procedure Local();
begin
end;
type
TProcedure = procedure ();
var
Proc: TProcedure;
begin
Proc := Local; { E2094 Local procedure/function 'Local' assigned to procedure variable }
end;
在第13行,编译器发出具有ERROR级别的消息,禁止所有这种本地过程使用的情况。 “官方”决议是将Local
符号提升到外部范围(即:使其成为Global
的兄弟),这将对代码“结构性”产生负面影响。
我正在寻找以最优雅的方式绕过它的方法,最好是让编译器发出警告级别的消息。
没有找到相关结果
已邀请:
4 个回复
懊毁暗
,然后您可以保持所有内容的良好封装。
这通过捕获匿名函数本地的任何变量来解决Mason描述的问题。
笛驮型迸
本地过程可以访问外部例程的变量范围。但是,这些变量在堆栈上声明,并且在外部过程返回后变为无效。 但是,如果您正在使用CompilerVersion 21(Delphi 2010),那么您可以使用匿名方法,这些方法应该能够满足您的需求;你需要一个稍微不同的语法。
呸溉
然而问题是地址寄存器在不同的机器上会有所不同 - 因此需要使用本地proc调用来编写一些代码,并通过断点查看哪些寄存器在那里使用... 是的 - 在大多数真实的制作案例中,这个技巧只是某种缓和。
播匣扦阔食