【发布时间】:2014-06-14 19:20:12
【问题描述】:
以下是基于第 1 部分的匿名方法部分中的示例的 SSCCE Chris Rolliston 的优秀 Delphi XE2 Foundations 书,关于变量的概念 捕获(其中的任何错误完全取决于我)。
它的工作原理完全符合我的预期,在连续点击 666、667、668、669 BtnInvoke 按钮。特别是它很好地说明了捕获的版本 局部变量 I 在 btnSetUpClick 退出后仍然存在很长时间。
到目前为止一切顺利。我要问的问题不是这段代码本身,而是 Allen Bauer 的博客中所说的:
http://blogs.embarcadero.com/abauer/2008/10/15/38876
现在,我知道最好不要和老板争论,所以我确定我没有抓住重点 他在变量捕获和价值捕获之间做出了区分。以我的简单方式 看看它,我的基于 CR 的示例通过将 I 捕获为变量来捕获 I 的值。
那么,我的问题是,Bauer 先生试图画出的区别究竟是什么?
(顺便说一句,尽管每天观看 SO 的 Delphi 部分已有 9 个多月,但我仍然不完全 明确这个 q 是否符合主题。如果没有,我很抱歉,我会删除它。)
type
TAnonProc = reference to procedure;
var
P1,
P2 : TAnonProc;
procedure TForm2.Log(Msg : String);
begin
Memo1.Lines.Add(Msg);
end;
procedure TForm2.btnSetUpClick(Sender: TObject);
var
I : Integer;
begin
I := 41;
P1 := procedure
begin
Inc(I);
Log(IntToStr(I));
end;
I := 665;
P2 := procedure
begin
Inc(I);
Log(IntToStr(I));
end;
end;
procedure TForm2.btnInvokeClick(Sender: TObject);
begin
Assert(Assigned(P1));
Assert(Assigned(P2));
P1;
P2;
end;
【问题讨论】:
标签: delphi delphi-xe2