在嵌套函数中传递参数

时间:2014-02-04 01:43:32

标签: delphi parameter-passing delphi-xe2 nested-function

我有这个嵌套函数,我想修改SearchName2以接收“S”作为参数,作为here中描述的问题的可能解决方案。

我还在学习Delphi,我很感激任何帮助,我一直在寻找嵌套的函数示例,我找不到类似的东西。

PFI = ^TFI;           
TFI = record
    Id         : TToken;
    Name       : TName;
    Parameters : string;
end;

function TListFI.IsIn(S: PChar): PFI;

  function SearchName2(Item: PFI):Boolean;
  var N1, N2: PChar;
  begin
    N1:= StrNew(Item^.Name);
    N2:= StrNew(S);
    SearchName2:= (StrComp(StrUpper(N1), StrUpper(N2)) = 0);
    StrDispose(N1);
    StrDispose(N2);
  end;

begin
  IsIn:= PFI(FirstThat(@SearchName2));
end;

1 个答案:

答案 0 :(得分:2)

Rob Kennedy在other discussion

中为您提供了解决方案
  

使SearchName2成为双参数函数,然后编写FirstThat接受S作为可以转发给函数参数的参数。

你需要做Rob告诉你的事情,这就是解决方案,例如:

type
  TFuncionColeccion = function (Elemento: TObject; S: PChar): Boolean;

function TColeccion.FirstThat (Rutina: TFuncionColeccion; S: PChar): TObject;
var
  i: Integer;
begin
  For i:=0 to Count-1 do
    if Rutina(Items[i], S) then
    begin
      FirstThat:=Items[i];
      exit;
    end;
  FirstThat:=nil;
end;

function SearchName2(Item: PFI; S: PChar):Boolean;
var
  N1, N2: PChar;
begin
  N1 := StrNew(Item^.Name);
  N2 := StrNew(S);
  SearchName2 := (StrComp(StrUpper(N1), StrUpper(N2)) = 0);
  StrDispose(N1);
  StrDispose(N2);
end;

function TListFI.IsIn(S: PChar): PFI;
egin
  IsIn := PFI(FirstThat(@SearchName2, S));
end;

话说回来,你可以完全摆脱StrNew()StrDispose()的使用:

function SearchName2(Item: PFI; S: PChar):Boolean;
begin
  SearchName2 := (StrIComp(Item^.Name, S) = 0);
end;