Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops Delphi循环中的就地匿名函数_Loops_Anonymous Function_Delphi Xe5 - Fatal编程技术网

Loops Delphi循环中的就地匿名函数

Loops Delphi循环中的就地匿名函数,loops,anonymous-function,delphi-xe5,Loops,Anonymous Function,Delphi Xe5,是否可以将其转换为: 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] d

是否可以将其转换为:

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.
?


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

在Delphi 10.3及更高版本中,可以使用内部循环来保存匿名过程,例如:

程序范围循环;
变量
i:整数;
开始
因为我在[2..7]中是这样做的
开始
var p:=过程(ix:整数)
开始
//做一些处理
var LocalVar:=。。。;
结束;
p(i);
结束;
结束。
在10.3之前,你所要求的根本不是你想要的方式。在循环上方定义
p
是您的最佳选择,除非您使用独立的过程,例如:

程序范围循环;
程序p(ix:整数);
变量
LocalVar:整数;
开始
//做一些处理
结束;
变量
i:整数;
开始
因为[2..7]中的i做p(i);
结束。
或者,如果可以使用,如果循环迭代是线程安全的,并且不依赖于彼此的结果:

程序范围循环;
使用
系统线程;
开始
t(2,7,过程)的并行(ix:整数)
开始
//做一些处理
结束;
);
结束。