我有这个嵌套函数,我想修改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;
答案 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;