Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verschiedene Ergebnistypen? (https://www.delphipraxis.net/33876-verschiedene-ergebnistypen.html)

Pseudemys Nelsoni 14. Nov 2004 08:12


Verschiedene Ergebnistypen?
 
moin,

wenn ich eine funktion sagen wir mal so aufrufe:

Delphi-Quellcode:
blah(0);
kann ich dann irgendwie anhand (zur laufzeit) der Zahl bestimmen ob ich String oder integer zurückliefere?

Es geht darum das ich bei der Übergabe von "0" einen integer zurückliefern möchte, bei allem anderen als 0 eben einen string. Überladen geht nicht, da sich die funktionen von den parametern her nicht unterscheiden. Es ist mir nur wichtig das die funktion den gleichen namen hat, geht das überhaupt?

jfheins 14. Nov 2004 08:17

Re: Verschiedene Ergebnistypen?
 
Du kannst afaik nicht mit einer Funktion zwei ergebnistypen zurückgeben.
Lösung eins wäre stattdessen einen Leerstring zurückzugeben,
Lösung zwei wäre ein eigener Typ.
Das könnte z.B. ein Record sein, mit einem Integer und einem String-Feld.

toms 14. Nov 2004 08:19

Re: Verschiedene Ergebnistypen?
 
Hi,

Vielleicht mit einem Variant als Result?

Delphi-Quellcode:
function blah(param: Integer): variant;
begin
 if param = 0 then
   Result := 123
 else
   Result := 'ein string';
end;

Pseudemys Nelsoni 14. Nov 2004 08:20

Re: Verschiedene Ergebnistypen?
 
Zitat:

Lösung eins wäre stattdessen einen Leerstring zurückzugeben
ne, wie gesagt es muss integer sein, da eine übergebene "0" heissen soll das die wörter die ein string enthält gezählt werdensollen.

lösung 2 werd ich dann wohl nehmen (müssen)

danke für deine hilfe ;)



@toms: sieht sehr gut aus, kannst du mir noch sagen wie ich das beim aufruf dann verwende? oder läuft das automatisch?

dachte muss so aussehen wie blah(0).AsInteger oder so

Nicodius 14. Nov 2004 08:24

Re: Verschiedene Ergebnistypen?
 
am einfachsten wäre es wenn du das nicht über ein result sondern über private/globale variablen machst


also zusätzlich 2 variablen

stre : string;
inte : integer;

Delphi-Quellcode:
begin
  if {.... (das mit der 0 halt) ...} then
    inte := 102023 
  else
    stre := '2323';
end;[/delphi]

das brauchst du natürlich nur mehr ne procedure ;)

oder aber(und jetzt kommts) du machst es per var



Delphi-Quellcode:
procedure machdas(var i : Integer); overload;
begin
 
end;
procedure machdas(var e : String); overload;
begin

end;
dann nur mehr deine abfrage rein und das wärs
;)

toms 14. Nov 2004 08:54

Re: Verschiedene Ergebnistypen?
 
Zitat:

Zitat von Pseudemys Nelsoni
Zitat:

Lösung eins wäre stattdessen einen Leerstring zurückzugeben

@toms: sieht sehr gut aus, kannst du mir noch sagen wie ich das beim aufruf dann verwende? oder läuft das automatisch?

dachte muss so aussehen wie blah(0).AsInteger oder so

Geht ganz einfach so:


Label1.Caption := blah(0); // Rückgabewertr ist ein Integer

Label1.Caption := blah(234); // Rückgabewertr ist ein string

Pseudemys Nelsoni 14. Nov 2004 08:59

Re: Verschiedene Ergebnistypen?
 
moin toms,

ich hab es zwar getestet und es funktioniert auch aber:

Zitat:

Label1.Caption := blah(0); // Rückgabewertr ist ein Integer
sollten string und integer nicht inkompatibel sein oder wird das automatisch irgendwie erledigt?

alcaeus 14. Nov 2004 09:20

Re: Verschiedene Ergebnistypen?
 
Hi Pseudemys Nelsoni,

bei Variant wird die Umwandlung AFAIK automatisch erledigt.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz