Toon posts:

[Delphi] Recursieve functie geeft geen result terug

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb twee klassen waarmee een soort van boomstructuur opgebouwd kan worden.
Hierin heb je groepen en items, ze kunnen beide onder groepen vallen.

Nu heb ik in de groupklasse (TUnitGroup) een functie die moet kijken of er een UnitItem met een bepaalde naam bestaat.
Het is een recursieve functie zodat er ook door de subgroupen van de group gelopen wordt. Het enige probleem is alleen dat wanneer er een match is gevonden de Result := true niet wordt teruggeven.
Waarom slaat delphi deze regel over?

De code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function TUnitGroup.checkUnitItemByName(aName : string) : boolean;
var
  i : integer;
  strTemp : String;
begin

  for i:= 0 to Count -1 do
  begin
    if Items[i].ClassType = TUnitItem then begin
      strTemp := (Items[i] as TUnitItem).name;
      if strTemp = aName then begin
        ShowMessage('ik ben de juiste unititem');
        Result := true; // deze regel slaat ie over
        ShowMessage('voorbij result = true');   // deze doet ie wel
      end;
    end;
    if Items[i].ClassType = TUnitGroup then begin
      Result := (Items[i] as TUnitGroup).checkUnitItemByName(aName);
    end;
  end;

  Result := false;

end;

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 19:25

Delphi32

Heading for the gates of Eden

Optimalisatie wellicht? Het maakt nl niet uit of je functie een item vindt, het resultaat van de functie is altijd False (zie regel 22) :) Denk dat die regel beter bovenaan had kunnen staan.

  • Paul
  • Registratie: September 2000
  • Laatst online: 21:05
Je laatste regel is "result := false"... Ik vind het niet zo heel gek dat je dan ALTIJD als uitkomst false krijgt :+

Je bent zeker de return uit c gewend of zo? Na een result springt Delphi NIET uit de procedure :) Dit kun je evt wel forceren met exit :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Topicstarter
8)7 Ja, ik ben java en c# gewend. Harstikke bedankt. Ik had me al rot gezocht op internet.