Code: Alles auswählen
procedure test (const input: string; out result: string);
begin
result:=input+input;
end;
Ich würde sie nun gerne mit einem String aufrufen. Es soll gleichzeitig der schon in diesem String gespeicherte Wert by value an die Prozedur übergeben und by reference das neue Ergebnis erhalten werden, also:
Code: Alles auswählen
s:='beispiel';
test(s,s);
-> Ergebnis: s = <leer>, weil schon als Parameter "input" ein leerer String an "test" übergeben wird.
Wird die Prozedur dagegen als "var result" statt "out result" deklariert, funktioniert das Konstrukt wie erwartet.
Ich würde gerne verstehen, warum es so ist, wie es ist. Oder ist das ein Compilerbug? Zumindest entspricht das beobachtete Verhalten nicht meiner Erwartung.