четверг, 4 апреля 2013 г.

Перехожу с Delphi 7 на Delphi XE3

Вот родился по ходу дела такой вот тест:


procedure TestList;
const
 cEtalon : array [0..4] of Integer = (1, 2, 3, 4, 5);

 function DoItem(pItem : PInteger; anIndex : Integer) : Boolean;
 begin
  Result := true;
  assert(pItem^ = cEtalon[anIndex]);
 end;

var
 l_L : Tl3LongintList;
 l_I : Integer;
begin
 l_L := Tl3LongintList.Create;
 try
  for l_I := Low(cEtalon) to High(cEtalon) do
   l_L.Add(cEtalon[l_I]);
  for l_I := Low(cEtalon) to High(cEtalon) do
   assert(l_L.Items[l_I] = cEtalon[l_I]);
  l_L.IterateAllF(l3L2IA(@DoItem)); 
  l_L.IterateBackF(l_L.Hi, l_L.Lo, l3L2IA(@DoItem)); 
 finally
  FreeAndNil(l_L);
 end;//try..finally
end;


-- казалось бы - банальный. Но ошибок покрыл - массу.

Я вот только одного пока не понял - а настоящие лямбды в Delphi XE3 есть или нету? http://8vmr.livejournal.com/6114.html
-- оно?

Т.е. так пишем:

procedure TestList;
const
 cEtalon : array [0..4] of Integer = (1, 2, 3, 4, 5);
var
 l_L : Tl3LongintList;
 l_I : Integer;
begin
 l_L := Tl3LongintList.Create;
 try
  for l_I := Low(cEtalon) to High(cEtalon) do
   l_L.Add(cEtalon[l_I]);

  l_L.IterateAll(
   function (pItem : PInteger; anIndex : Integer) : Boolean;
   begin
    Result := true;
    assert(pItem^ = cEtalon[anIndex]);
   end;); 
 finally
  FreeAndNil(l_L);
 end;//try..finally
end;

? Или локальную функцию передать можно?

Комментариев нет:

Отправить комментарий