Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Record als Result einer Funktion (https://www.delphipraxis.net/203816-record-als-result-einer-funktion.html)

NoGAD 27. Mär 2020 13:44

Record als Result einer Funktion
 
Hallo,

wenn ich einen Record deklariere und diesen dann einer Funktion als Result zuordne, werden alle Werte innerhalb des Records auf True gesetzt.

Warum, weiß ich nicht.

Hier ein Beispiel:

Code:
type
  TTest_Result = record
    Test_a : Boolean;
    Test_b : Boolean;
    Test_c : Boolean;
  end;


  function test(a:integer):TTest_Result;

  function test(a:integer):TTest_Result;
  begin
    Result.Test_a := True;
  end;
Rufe ich die funktion nun auf, ist alles vom Result auch True.

Eine Zuweisung mittels Result.Test_b := False; z.B. innerhalb der function oder vorher aus dem Aufruf der function heraus, bringt auch nichts.


Warum passiert das und wie behebe ich diesen Fehler?

LG Mathias

DieDolly 27. Mär 2020 14:03

AW: Record als Result einer Funktion
 
Versuch mal so. Funktioniert bei mir wie gewünscht
Booleans sind, wenn sie vorher nicht initialisiert werden, immer auf True. Jedenfalls bei MIR unter 10.3.3.
Delphi-Quellcode:
function test: TTest_Result;
begin
 Result.Test_a := True;
 Result.Test_b := False;
 Result.Test_c := True;
end;
// was du in der Funktion test am Ende machst, bleibt dir überlassen

procedure TForm1.Button2Click(Sender: TObject);
var
 X: TTest_Result;
begin
 X := test;

 showmessage(
  BoolToStr(X.Test_a, True)+sLineBreak+
  BoolToStr(X.Test_b, True)+sLineBreak+
  BoolToStr(X.Test_c, True)
 );
end;

Dennis07 27. Mär 2020 14:06

AW: Record als Result einer Funktion
 
Kann diesen Fehler nicht reproduzieren. Das Problem muss also wo anders liegen. Bei mir Funktioniert der von dir aufgeführte Code problemlos, und es wird
Delphi-Quellcode:
(True, False, False).
zurückgegeben.

DieDolly 27. Mär 2020 14:08

AW: Record als Result einer Funktion
 
Zitat:

Das Problem muss also wo anders liegen.
Zitat:

Eine Zuweisung mittels Result.Test_b := False; z.B. innerhalb der function oder vorher aus dem Aufruf der function heraus, bringt auch nichts.
Zeig mal den Aufruf.

Dennis07 27. Mär 2020 14:11

AW: Record als Result einer Funktion
 
Zitat:

Zitat von DieDolly (Beitrag 1460627)
Booleans sind, wenn sie vorher nicht initialisiert werden, immer auf True. Jedenfalls unter 10.3.3.

WAS? Also ich habs grad mal unter 10.3.2 getestet, und da ist es immer
Delphi-Quellcode:
False
. Außerdem werden initialisierte Variablen immer mit 0 beschrieben, so ist das auch in der aktuellen OH nachzulesen.

Habe gerade kein 10.3.3 zur Hand, wäre aber definitiv ein Bug, wenn es so wie von dir beschrieben sich verhält.

Uwe Raabe 27. Mär 2020 14:12

AW: Record als Result einer Funktion
 
Da du den anderen Feldern von result keine Werte zuweist, ist deren Inhalt eher zufällig.

DieDolly 27. Mär 2020 14:13

AW: Record als Result einer Funktion
 
Zitat:

Also ich habs grad mal unter 10.3.2 getestet
Du: 10.3.2
Ich: 10.3.3.

Vielleicht gibt es da Unterschiede oder einen Bug. Ich hatte immer alle auf True, obwohl ich persönlich eher False erwartet hätte.

Dennis07 27. Mär 2020 14:14

AW: Record als Result einer Funktion
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1460633)
Da du den anderen Feldern von result keine Werte zuweist, ist deren Inhalt eher zufällig.

Kommt auf die Variable an...

DieDolly 27. Mär 2020 14:15

AW: Record als Result einer Funktion
 
Um das abzukürzen und nicht 10 Seiten an Diskussionen zu erzeugen:

einfach alles initialisieren oder setzen. Dann gibt es auch kein Problem.
Aber bevor wir hier nicht sehen wie test() aufgerufen wird, kann man eh nix sagen.

Dennis07 27. Mär 2020 14:16

AW: Record als Result einer Funktion
 
Zitat:

Zitat von DieDolly (Beitrag 1460634)
Vielleicht gibt es da Unterschiede oder einen Bug. Ich hatte immer alle auf True, obwohl ich persönlich eher False erwartet hätte.

Bei automatisch initialisierten Variablen? Denn die müssten immer False sein.
Ansonsten ist der Wert halt zufällig, und da alles außer 0 als
Delphi-Quellcode:
True
ausgewertet wird, erhältst du halt meistens das. Das wäre in dem Fall aber immer noch Zufall und nichts, auf das du dich verlassen kannst/solltest!

EDIT: (kleine Ergänzung):
Automatisch initialisierte Variablen sind Strings, dynamische Arrays, Objektfelder und globale Variablen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 7  1 23     Letzte »    

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