当没有外部上下文时,程序变量和匿名函数是否等效?

时间:2010-09-16 14:10:59

标签: delphi anonymous-function

我理解在匿名过程中提到外部变量时,有一些特殊的操作来维护外部变量的生命周期。但是当匿名过程不使用外部变量时,它是否会生成与旧的常规过程相同的程序集调用。换句话说,片段1中的匿名函数的内部结构和片段2中的NamedFunction是否相同

片段1

type
  TSimpleFunction = reference to function(x: string): Integer;

begin
  y1 := function(x: string): Integer
    begin
      Result := Length(x);
    end;

  y1('test');
end.

片段1

type
  TWellKnownSimpleFunction = function(x: string): Integer;

function NamedFunction(x: string): Integer;
begin
  Result := Length(x);
end;

var
  y1: TWellKnownSimpleFunction;
begin
  y1:=NamedFunction;

  y1('test');
end.

1 个答案:

答案 0 :(得分:4)

没有。匿名方法在内部实现为接口引用。请阅读Barry Kelly's article了解详情。

您还可以查看my article我在哪里尝试使用模仿匿名的界面 方法

匿名方法不是程序变量,即使它们不捕获变量。