我只知道從Delphi XE7有Parallel.For這很酷。所以我嘗試一小塊的代碼轉換,如:德爾福TParallel.For - 無法捕捉符號
procedure TestParallel;
var
i, j, u, v: integer;
map: array of array of integer;
begin
SetLength(map, 101, 101);
u := 100; v := 100;
for i := 0 to u do
begin
for j := 0 to v do
begin
if (map[i][j] <> 0) then
begin
map[i][j] := 1;
end;
end;
end;
end;
到:
procedure TestParallel;
var
i, u, v: integer;
map: array of array of integer;
begin
SetLength(map, 101, 101);
u := 100; v := 100;
TParallel.&For(0, u, procedure(i: integer)
var
j: integer;
begin
for j := 0 to v do
begin
if (map[i][j] <> 0) then
begin
map[i][j] := 1;
end;
end;
end);
end;
UPDATE
是,以上代碼編譯,下面不(如果地圖數組作爲var參數傳遞)
type
data = array of array of integer;
procedure TestParallel(var map: data);
var
i, u, v: integer;
begin
SetLength(map, 101, 101);
u := 100; v := 100;
TParallel.&For(0, u, procedure(i: integer)
var
j: integer;
begin
for j := 0 to v do
begin
if (map[i][j] <> 0) then
begin
map[i][j] := 1;
end;
end;
end);
end;
但不幸的是,編譯器說:
[dcc64 Error] Project2.dpr(70): E2555 Cannot capture symbol 'map'
那麼,如何使這項工作儘可能簡單?
謝謝。我發現如果map作爲var參數傳遞給過程,那麼它將不會編譯... –
問題中的代碼不會將該數組作爲var參數傳遞。你可能想知道爲什麼我總是要求[mcve]。我希望你現在能理解我爲什麼這麼做。 –
謝謝。現在我明白你的意思了......重新編輯了這個問題。 –