是否有本机语法从Delphi中的内部函数访问外部函数Result变量?

Vad*_*ich 8 delphi delphi-xe

考虑:

function OuterFunc: integer;
  function InnerFunc: integer;
  begin
    // Here I'd like to access the OuterFunc.Result variable
    // for both reading and writing its value
    OuterFunc.Result := OuterFunc.Result + 12;
  end;
begin
end;
Run Code Online (Sandbox Code Playgroud)

是否有本机语法来访问InnerFunc中的OuterFunc Result变量?或者是唯一的方法来传递它像参数,如下所示?

function OuterFunc: integer;
  function InnerFunc(var outerResult: integer): integer;
  begin
  end;
var
  i: integer;
begin
  i := InnerFunc(Result);
end;
Run Code Online (Sandbox Code Playgroud)

Tom*_*erg 11

您可以通过分配函数名称将结果分配给函数,这实际上是Pascal中的原始方式:

function MyFunc: integer;
begin
  MyFunc := 2;
  // is equal to the following
  Result := 2;
end;
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下你可以写

function OuterFunc: integer;
  function InnerFunc: integer; 
  begin
    OuterFunc := 12;
  end;
begin
end;
Run Code Online (Sandbox Code Playgroud)

但请注意,在语句块中使用除了赋值运算符左侧之外的任何其他函数名称会导致递归调用,因此与预定义的Result工作方式不同.

换句话说,您无法OuterFunc从内部访问先前设置的值InnerFunc.您需要使用例如之前定义的外部作用域中的局部变量,InnerFunc也可以从InnerFunc访问:

function OuterFunc: integer;
var
  OuterResult: integer;

  function InnerFunc: integer; 
  begin
    OuterResult := 0;
    OuterResult := OuterResult + 12;
  end;
begin
  Result := OuterResult;
end;
Run Code Online (Sandbox Code Playgroud)

欲了解更多详情,请参阅Function Declarations的文档.