Delphi循环中的就地匿名函数

问题描述 投票:0回答:1

是否可以转换此:

program RangeLoop;

type
  TIndexedProc = reference to procedure(idx: Integer);

var
  i: Integer;
  p: TIndexedProc;

begin
  p := procedure(ix: Integer)
  var LocalVar: Integer;
  begin
    //Do some processing
  end;
  for i in [2..7] do p(i);
end.

变成这样:

program RangeLoop;

var
  i: Integer;

begin
  for i in [2..7] do procedure(ix: Integer)
  var LocalVar: Boolean;
  begin
    //Do some processing
  end;
end.

我知道最后一个代码块无效。

loops anonymous-function delphi-xe5
1个回答
0
投票

在Delphi 10.3及更高版本中,您可以在循环内使用inline variable,例如:

program RangeLoop;

var
  i: Integer;

begin
  for i in [2..7] do
  begin
    var p := procedure(ix: Integer)
    begin
      //Do some processing
      var LocalVar := ...;
    end;
    p(i);
  end;
end.

10.3之前,您所要求的根本不可行。最好在循环上方定义p

© www.soinside.com 2019 - 2024. All rights reserved.